# pylint: disable=line-too-long,useless-suppression,too-many-lines
# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# Code generated by Microsoft (R) Python Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------
# pylint: disable=useless-super-delegation

import datetime
from typing import Any, Literal, Mapping, Optional, TYPE_CHECKING, Union, overload

from .._utils.model_base import Model as _Model, rest_field

if TYPE_CHECKING:
    from .. import models as _models


class AbnormalTimePeriod(_Model):
    """Class representing Abnormal Time Period identified in diagnosis.

    :ivar start_time: Start time of the downtime.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: End time of the downtime.
    :vartype end_time: ~datetime.datetime
    :ivar events: List of Possible Cause of downtime.
    :vartype events: list[~azure.mgmt.web.models.DetectorAbnormalTimePeriod]
    :ivar solutions: List of proposed solutions.
    :vartype solutions: list[~azure.mgmt.web.models.Solution]
    """

    start_time: Optional[datetime.datetime] = rest_field(
        name="startTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Start time of the downtime."""
    end_time: Optional[datetime.datetime] = rest_field(
        name="endTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """End time of the downtime."""
    events: Optional[list["_models.DetectorAbnormalTimePeriod"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """List of Possible Cause of downtime."""
    solutions: Optional[list["_models.Solution"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """List of proposed solutions."""

    @overload
    def __init__(
        self,
        *,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        events: Optional[list["_models.DetectorAbnormalTimePeriod"]] = None,
        solutions: Optional[list["_models.Solution"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Resource(_Model):
    """Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    """

    id: Optional[str] = rest_field(visibility=["read"])
    """Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}."""
    name: Optional[str] = rest_field(visibility=["read"])
    """The name of the resource."""
    type: Optional[str] = rest_field(visibility=["read"])
    """The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or
     \"Microsoft.Storage/storageAccounts\"."""
    system_data: Optional["_models.SystemData"] = rest_field(name="systemData", visibility=["read"])
    """Azure Resource Manager metadata containing createdBy and modifiedBy information."""


class ProxyResource(Resource):
    """Proxy Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    """


class AddressResponse(ProxyResource):
    """Describes main public IP address and any extra virtual IPs.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: AddressResponse resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.AddressResponseProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.AddressResponseProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """AddressResponse resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["service_ip_address", "internal_ip_address", "outbound_ip_addresses", "vip_mappings"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.AddressResponseProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class AddressResponseProperties(_Model):
    """AddressResponse resource specific properties.

    :ivar service_ip_address: Main public virtual IP.
    :vartype service_ip_address: str
    :ivar internal_ip_address: Virtual Network internal IP address of the App Service Environment
     if it is in internal load-balancing mode.
    :vartype internal_ip_address: str
    :ivar outbound_ip_addresses: IP addresses appearing on outbound connections.
    :vartype outbound_ip_addresses: list[str]
    :ivar vip_mappings: Additional virtual IPs.
    :vartype vip_mappings: list[~azure.mgmt.web.models.VirtualIPMapping]
    """

    service_ip_address: Optional[str] = rest_field(
        name="serviceIpAddress", visibility=["read", "create", "update", "delete", "query"]
    )
    """Main public virtual IP."""
    internal_ip_address: Optional[str] = rest_field(
        name="internalIpAddress", visibility=["read", "create", "update", "delete", "query"]
    )
    """Virtual Network internal IP address of the App Service Environment if it is in internal
     load-balancing mode."""
    outbound_ip_addresses: Optional[list[str]] = rest_field(
        name="outboundIpAddresses", visibility=["read", "create", "update", "delete", "query"]
    )
    """IP addresses appearing on outbound connections."""
    vip_mappings: Optional[list["_models.VirtualIPMapping"]] = rest_field(
        name="vipMappings", visibility=["read", "create", "update", "delete", "query"]
    )
    """Additional virtual IPs."""

    @overload
    def __init__(
        self,
        *,
        service_ip_address: Optional[str] = None,
        internal_ip_address: Optional[str] = None,
        outbound_ip_addresses: Optional[list[str]] = None,
        vip_mappings: Optional[list["_models.VirtualIPMapping"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AllowedAudiencesValidation(_Model):
    """The configuration settings of the Allowed Audiences validation flow.

    :ivar allowed_audiences: The configuration settings of the allowed list of audiences from which
     to validate the JWT token.
    :vartype allowed_audiences: list[str]
    """

    allowed_audiences: Optional[list[str]] = rest_field(
        name="allowedAudiences", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the allowed list of audiences from which to validate the JWT
     token."""

    @overload
    def __init__(
        self,
        *,
        allowed_audiences: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AllowedPrincipals(_Model):
    """The configuration settings of the Azure Active Directory allowed principals.

    :ivar groups: The list of the allowed groups.
    :vartype groups: list[str]
    :ivar identities: The list of the allowed identities.
    :vartype identities: list[str]
    """

    groups: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The list of the allowed groups."""
    identities: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The list of the allowed identities."""

    @overload
    def __init__(
        self,
        *,
        groups: Optional[list[str]] = None,
        identities: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AnalysisData(_Model):
    """Class Representing Detector Evidence used for analysis.

    :ivar source: Name of the Detector.
    :vartype source: str
    :ivar detector_definition: Detector Definition.
    :vartype detector_definition: ~azure.mgmt.web.models.DetectorDefinition
    :ivar metrics: Source Metrics.
    :vartype metrics: list[~azure.mgmt.web.models.DiagnosticMetricSet]
    :ivar data: Additional Source Data.
    :vartype data: list[list[~azure.mgmt.web.models.NameValuePair]]
    :ivar detector_meta_data: Detector Meta Data.
    :vartype detector_meta_data: ~azure.mgmt.web.models.ResponseMetaData
    """

    source: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the Detector."""
    detector_definition: Optional["_models.DetectorDefinition"] = rest_field(
        name="detectorDefinition", visibility=["read", "create", "update", "delete", "query"]
    )
    """Detector Definition."""
    metrics: Optional[list["_models.DiagnosticMetricSet"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Source Metrics."""
    data: Optional[list[list["_models.NameValuePair"]]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Additional Source Data."""
    detector_meta_data: Optional["_models.ResponseMetaData"] = rest_field(
        name="detectorMetaData", visibility=["read", "create", "update", "delete", "query"]
    )
    """Detector Meta Data."""

    @overload
    def __init__(
        self,
        *,
        source: Optional[str] = None,
        detector_definition: Optional["_models.DetectorDefinition"] = None,
        metrics: Optional[list["_models.DiagnosticMetricSet"]] = None,
        data: Optional[list[list["_models.NameValuePair"]]] = None,
        detector_meta_data: Optional["_models.ResponseMetaData"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AnalysisDefinition(ProxyResource):
    """Definition of Analysis.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: AnalysisDefinition resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.AnalysisDefinitionProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.AnalysisDefinitionProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """AnalysisDefinition resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["description"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.AnalysisDefinitionProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class AnalysisDefinitionProperties(_Model):
    """AnalysisDefinition resource specific properties.

    :ivar description: Description of the Analysis.
    :vartype description: str
    """

    description: Optional[str] = rest_field(visibility=["read"])
    """Description of the Analysis."""


class ApiDefinitionInfo(_Model):
    """Information about the formal API definition for the app.

    :ivar url: The URL of the API definition.
    :vartype url: str
    """

    url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The URL of the API definition."""

    @overload
    def __init__(
        self,
        *,
        url: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ApiKVReference(ProxyResource):
    """Description of site key vault references.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: ApiKVReference resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.ApiKVReferenceProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.ApiKVReferenceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """ApiKVReference resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "reference",
        "status",
        "vault_name",
        "secret_name",
        "secret_version",
        "identity_type",
        "details",
        "source",
        "active_version",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.ApiKVReferenceProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class ApiKVReferenceProperties(_Model):
    """ApiKVReference resource specific properties.

    :ivar reference:
    :vartype reference: str
    :ivar status: Known values are: "Initialized", "Resolved", "InvalidSyntax", "MSINotEnabled",
     "VaultNotFound", "SecretNotFound", "SecretVersionNotFound", "AccessToKeyVaultDenied",
     "OtherReasons", "FetchTimedOut", and "UnauthorizedClient".
    :vartype status: str or ~azure.mgmt.web.models.ResolveStatus
    :ivar vault_name:
    :vartype vault_name: str
    :ivar secret_name:
    :vartype secret_name: str
    :ivar secret_version:
    :vartype secret_version: str
    :ivar identity_type: Managed service identity.
    :vartype identity_type: ~azure.mgmt.web.models.ManagedServiceIdentity
    :ivar details:
    :vartype details: str
    :ivar source: Default value is "KeyVault".
    :vartype source: str
    :ivar active_version:
    :vartype active_version: str
    """

    reference: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    status: Optional[Union[str, "_models.ResolveStatus"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Known values are: \"Initialized\", \"Resolved\", \"InvalidSyntax\", \"MSINotEnabled\",
     \"VaultNotFound\", \"SecretNotFound\", \"SecretVersionNotFound\", \"AccessToKeyVaultDenied\",
     \"OtherReasons\", \"FetchTimedOut\", and \"UnauthorizedClient\"."""
    vault_name: Optional[str] = rest_field(name="vaultName", visibility=["read", "create", "update", "delete", "query"])
    secret_name: Optional[str] = rest_field(
        name="secretName", visibility=["read", "create", "update", "delete", "query"]
    )
    secret_version: Optional[str] = rest_field(
        name="secretVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    identity_type: Optional["_models.ManagedServiceIdentity"] = rest_field(
        name="identityType", visibility=["read", "create", "update", "delete", "query"]
    )
    """Managed service identity."""
    details: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    source: Optional[Literal["KeyVault"]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Default value is \"KeyVault\"."""
    active_version: Optional[str] = rest_field(
        name="activeVersion", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        reference: Optional[str] = None,
        status: Optional[Union[str, "_models.ResolveStatus"]] = None,
        vault_name: Optional[str] = None,
        secret_name: Optional[str] = None,
        secret_version: Optional[str] = None,
        identity_type: Optional["_models.ManagedServiceIdentity"] = None,
        details: Optional[str] = None,
        source: Optional[Literal["KeyVault"]] = None,
        active_version: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ApiManagementConfig(_Model):
    """Azure API management (APIM) configuration linked to the app.

    :ivar id: APIM-Api Identifier.
    :vartype id: str
    """

    id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """APIM-Api Identifier."""

    @overload
    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AppInsightsWebAppStackSettings(_Model):
    """App Insights Web App stack settings.

    :ivar is_supported: <code>true</code> if remote Application Insights is supported for the
     stack; otherwise, <code>false</code>.
    :vartype is_supported: bool
    :ivar is_default_off: <code>true</code> if Application Insights is disabled by default for the
     stack; otherwise, <code>false</code>.
    :vartype is_default_off: bool
    """

    is_supported: Optional[bool] = rest_field(name="isSupported", visibility=["read"])
    """<code>true</code> if remote Application Insights is supported for the stack; otherwise,
     <code>false</code>."""
    is_default_off: Optional[bool] = rest_field(name="isDefaultOff", visibility=["read"])
    """<code>true</code> if Application Insights is disabled by default for the stack; otherwise,
     <code>false</code>."""


class Apple(_Model):
    """The configuration settings of the Apple provider.

    :ivar enabled: <code>false</code> if the Apple provider should not be enabled despite the set
     registration; otherwise, <code>true</code>.
    :vartype enabled: bool
    :ivar registration: The configuration settings of the Apple registration.
    :vartype registration: ~azure.mgmt.web.models.AppleRegistration
    :ivar login: The configuration settings of the login flow.
    :vartype login: ~azure.mgmt.web.models.LoginScopes
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>false</code> if the Apple provider should not be enabled despite the set registration;
     otherwise, <code>true</code>."""
    registration: Optional["_models.AppleRegistration"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the Apple registration."""
    login: Optional["_models.LoginScopes"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The configuration settings of the login flow."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        registration: Optional["_models.AppleRegistration"] = None,
        login: Optional["_models.LoginScopes"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AppleRegistration(_Model):
    """The configuration settings of the registration for the Apple provider.

    :ivar client_id: The Client ID of the app used for login.
    :vartype client_id: str
    :ivar client_secret_setting_name: The app setting name that contains the client secret.
    :vartype client_secret_setting_name: str
    """

    client_id: Optional[str] = rest_field(name="clientId", visibility=["read", "create", "update", "delete", "query"])
    """The Client ID of the app used for login."""
    client_secret_setting_name: Optional[str] = rest_field(
        name="clientSecretSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The app setting name that contains the client secret."""

    @overload
    def __init__(
        self,
        *,
        client_id: Optional[str] = None,
        client_secret_setting_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ApplicationLogsConfig(_Model):
    """Application logs configuration.

    :ivar file_system: Application logs to file system configuration.
    :vartype file_system: ~azure.mgmt.web.models.FileSystemApplicationLogsConfig
    :ivar azure_table_storage: Application logs to azure table storage configuration.
    :vartype azure_table_storage: ~azure.mgmt.web.models.AzureTableStorageApplicationLogsConfig
    :ivar azure_blob_storage: Application logs to blob storage configuration.
    :vartype azure_blob_storage: ~azure.mgmt.web.models.AzureBlobStorageApplicationLogsConfig
    """

    file_system: Optional["_models.FileSystemApplicationLogsConfig"] = rest_field(
        name="fileSystem", visibility=["read", "create", "update", "delete", "query"]
    )
    """Application logs to file system configuration."""
    azure_table_storage: Optional["_models.AzureTableStorageApplicationLogsConfig"] = rest_field(
        name="azureTableStorage", visibility=["read", "create", "update", "delete", "query"]
    )
    """Application logs to azure table storage configuration."""
    azure_blob_storage: Optional["_models.AzureBlobStorageApplicationLogsConfig"] = rest_field(
        name="azureBlobStorage", visibility=["read", "create", "update", "delete", "query"]
    )
    """Application logs to blob storage configuration."""

    @overload
    def __init__(
        self,
        *,
        file_system: Optional["_models.FileSystemApplicationLogsConfig"] = None,
        azure_table_storage: Optional["_models.AzureTableStorageApplicationLogsConfig"] = None,
        azure_blob_storage: Optional["_models.AzureBlobStorageApplicationLogsConfig"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ApplicationStack(_Model):
    """Application stack.

    :ivar name: Application stack name.
    :vartype name: str
    :ivar display: Application stack display name.
    :vartype display: str
    :ivar dependency: Application stack dependency.
    :vartype dependency: str
    :ivar major_versions: List of major versions available.
    :vartype major_versions: list[~azure.mgmt.web.models.StackMajorVersion]
    :ivar frameworks: List of frameworks associated with application stack.
    :vartype frameworks: list[~azure.mgmt.web.models.ApplicationStack]
    :ivar is_deprecated: <code>true</code> if this is the stack is deprecated; otherwise,
     <code>false</code>.
    :vartype is_deprecated: list[~azure.mgmt.web.models.ApplicationStack]
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Application stack name."""
    display: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Application stack display name."""
    dependency: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Application stack dependency."""
    major_versions: Optional[list["_models.StackMajorVersion"]] = rest_field(
        name="majorVersions", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of major versions available."""
    frameworks: Optional[list["_models.ApplicationStack"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """List of frameworks associated with application stack."""
    is_deprecated: Optional[list["_models.ApplicationStack"]] = rest_field(
        name="isDeprecated", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if this is the stack is deprecated; otherwise, <code>false</code>."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        display: Optional[str] = None,
        dependency: Optional[str] = None,
        major_versions: Optional[list["_models.StackMajorVersion"]] = None,
        frameworks: Optional[list["_models.ApplicationStack"]] = None,
        is_deprecated: Optional[list["_models.ApplicationStack"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ProxyOnlyResource(_Model):
    """Azure proxy only resource. This resource is not tracked by Azure Resource Manager.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    """

    id: Optional[str] = rest_field(visibility=["read"])
    """Resource Id."""
    name: Optional[str] = rest_field(visibility=["read"])
    """Resource Name."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""
    type: Optional[str] = rest_field(visibility=["read"])
    """Resource type."""

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ApplicationStackResource(ProxyOnlyResource):
    """ARM resource for a ApplicationStack.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: Core resource properties.
    :vartype properties: ~azure.mgmt.web.models.ApplicationStack
    """

    properties: Optional["_models.ApplicationStack"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Core resource properties."""

    __flattened_items = ["name", "display", "dependency", "major_versions", "frameworks", "is_deprecated"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.ApplicationStack"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class AppLogsConfiguration(_Model):
    """AppLogsConfiguration.

    :ivar destination:
    :vartype destination: str
    :ivar log_analytics_configuration:
    :vartype log_analytics_configuration: ~azure.mgmt.web.models.LogAnalyticsConfiguration
    """

    destination: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    log_analytics_configuration: Optional["_models.LogAnalyticsConfiguration"] = rest_field(
        name="logAnalyticsConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        destination: Optional[str] = None,
        log_analytics_configuration: Optional["_models.LogAnalyticsConfiguration"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AppRegistration(_Model):
    """The configuration settings of the app registration for providers that have app ids and app
    secrets.

    :ivar app_id: The App ID of the app used for login.
    :vartype app_id: str
    :ivar app_secret_setting_name: The app setting name that contains the app secret.
    :vartype app_secret_setting_name: str
    """

    app_id: Optional[str] = rest_field(name="appId", visibility=["read", "create", "update", "delete", "query"])
    """The App ID of the app used for login."""
    app_secret_setting_name: Optional[str] = rest_field(
        name="appSecretSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The app setting name that contains the app secret."""

    @overload
    def __init__(
        self,
        *,
        app_id: Optional[str] = None,
        app_secret_setting_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AppServiceEnvironment(_Model):
    """Description of an App Service Environment.

    :ivar provisioning_state: Provisioning state of the App Service Environment. Known values are:
     "Succeeded", "Failed", "Canceled", "InProgress", and "Deleting".
    :vartype provisioning_state: str or ~azure.mgmt.web.models.ProvisioningState
    :ivar status: Current status of the App Service Environment. Known values are: "Preparing",
     "Ready", "Scaling", and "Deleting".
    :vartype status: str or ~azure.mgmt.web.models.HostingEnvironmentStatus
    :ivar virtual_network: Description of the Virtual Network. Required.
    :vartype virtual_network: ~azure.mgmt.web.models.VirtualNetworkProfile
    :ivar internal_load_balancing_mode: Specifies which endpoints to serve internally in the
     Virtual Network for the App Service Environment. Known values are: "None", "Web", "Publishing",
     and "Web, Publishing".
    :vartype internal_load_balancing_mode: str or ~azure.mgmt.web.models.LoadBalancingMode
    :ivar multi_size: Front-end VM size, e.g. "Medium", "Large".
    :vartype multi_size: str
    :ivar multi_role_count: Number of front-end instances.
    :vartype multi_role_count: int
    :ivar ipssl_address_count: Number of IP SSL addresses reserved for the App Service Environment.
    :vartype ipssl_address_count: int
    :ivar dns_suffix: DNS suffix of the App Service Environment.
    :vartype dns_suffix: str
    :ivar maximum_number_of_machines: Maximum number of VMs in the App Service Environment.
    :vartype maximum_number_of_machines: int
    :ivar front_end_scale_factor: Scale factor for front-ends.
    :vartype front_end_scale_factor: int
    :ivar suspended: <code>true</code> if the App Service Environment is suspended; otherwise,
     <code>false</code>. The environment can be suspended, e.g. when the management endpoint is no
     longer available (most likely because NSG blocked the incoming traffic).
    :vartype suspended: bool
    :ivar cluster_settings: Custom settings for changing the behavior of the App Service
     Environment.
    :vartype cluster_settings: list[~azure.mgmt.web.models.NameValuePair]
    :ivar user_whitelisted_ip_ranges: User added ip ranges to whitelist on ASE db.
    :vartype user_whitelisted_ip_ranges: list[str]
    :ivar has_linux_workers: Flag that displays whether an ASE has linux workers or not.
    :vartype has_linux_workers: bool
    :ivar upgrade_preference: Upgrade Preference. Known values are: "None", "Early", "Late", and
     "Manual".
    :vartype upgrade_preference: str or ~azure.mgmt.web.models.UpgradePreference
    :ivar dedicated_host_count: Dedicated Host Count.
    :vartype dedicated_host_count: int
    :ivar zone_redundant: Whether or not this App Service Environment is zone-redundant.
    :vartype zone_redundant: bool
    :ivar custom_dns_suffix_configuration: Full view of the custom domain suffix configuration for
     ASEv3.
    :vartype custom_dns_suffix_configuration: ~azure.mgmt.web.models.CustomDnsSuffixConfiguration
    :ivar networking_configuration: Full view of networking configuration for an ASE.
    :vartype networking_configuration: ~azure.mgmt.web.models.AseV3NetworkingConfiguration
    :ivar upgrade_availability: Whether an upgrade is available for this App Service Environment.
     Known values are: "None" and "Ready".
    :vartype upgrade_availability: str or ~azure.mgmt.web.models.UpgradeAvailability
    """

    provisioning_state: Optional[Union[str, "_models.ProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read"]
    )
    """Provisioning state of the App Service Environment. Known values are: \"Succeeded\", \"Failed\",
     \"Canceled\", \"InProgress\", and \"Deleting\"."""
    status: Optional[Union[str, "_models.HostingEnvironmentStatus"]] = rest_field(visibility=["read"])
    """Current status of the App Service Environment. Known values are: \"Preparing\", \"Ready\",
     \"Scaling\", and \"Deleting\"."""
    virtual_network: "_models.VirtualNetworkProfile" = rest_field(
        name="virtualNetwork", visibility=["read", "create", "update", "delete", "query"]
    )
    """Description of the Virtual Network. Required."""
    internal_load_balancing_mode: Optional[Union[str, "_models.LoadBalancingMode"]] = rest_field(
        name="internalLoadBalancingMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """Specifies which endpoints to serve internally in the Virtual Network for the App Service
     Environment. Known values are: \"None\", \"Web\", \"Publishing\", and \"Web, Publishing\"."""
    multi_size: Optional[str] = rest_field(name="multiSize", visibility=["read", "create", "update", "delete", "query"])
    """Front-end VM size, e.g. \"Medium\", \"Large\"."""
    multi_role_count: Optional[int] = rest_field(name="multiRoleCount", visibility=["read"])
    """Number of front-end instances."""
    ipssl_address_count: Optional[int] = rest_field(
        name="ipsslAddressCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """Number of IP SSL addresses reserved for the App Service Environment."""
    dns_suffix: Optional[str] = rest_field(name="dnsSuffix", visibility=["read", "create", "update", "delete", "query"])
    """DNS suffix of the App Service Environment."""
    maximum_number_of_machines: Optional[int] = rest_field(name="maximumNumberOfMachines", visibility=["read"])
    """Maximum number of VMs in the App Service Environment."""
    front_end_scale_factor: Optional[int] = rest_field(
        name="frontEndScaleFactor", visibility=["read", "create", "update", "delete", "query"]
    )
    """Scale factor for front-ends."""
    suspended: Optional[bool] = rest_field(visibility=["read"])
    """<code>true</code> if the App Service Environment is suspended; otherwise, <code>false</code>.
     The environment can be suspended, e.g. when the management endpoint is no longer available
     (most likely because NSG blocked the incoming traffic)."""
    cluster_settings: Optional[list["_models.NameValuePair"]] = rest_field(
        name="clusterSettings", visibility=["read", "create", "update", "delete", "query"]
    )
    """Custom settings for changing the behavior of the App Service Environment."""
    user_whitelisted_ip_ranges: Optional[list[str]] = rest_field(
        name="userWhitelistedIpRanges", visibility=["read", "create", "update", "delete", "query"]
    )
    """User added ip ranges to whitelist on ASE db."""
    has_linux_workers: Optional[bool] = rest_field(name="hasLinuxWorkers", visibility=["read"])
    """Flag that displays whether an ASE has linux workers or not."""
    upgrade_preference: Optional[Union[str, "_models.UpgradePreference"]] = rest_field(
        name="upgradePreference", visibility=["read", "create", "update", "delete", "query"]
    )
    """Upgrade Preference. Known values are: \"None\", \"Early\", \"Late\", and \"Manual\"."""
    dedicated_host_count: Optional[int] = rest_field(
        name="dedicatedHostCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """Dedicated Host Count."""
    zone_redundant: Optional[bool] = rest_field(
        name="zoneRedundant", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether or not this App Service Environment is zone-redundant."""
    custom_dns_suffix_configuration: Optional["_models.CustomDnsSuffixConfiguration"] = rest_field(
        name="customDnsSuffixConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """Full view of the custom domain suffix configuration for ASEv3."""
    networking_configuration: Optional["_models.AseV3NetworkingConfiguration"] = rest_field(
        name="networkingConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """Full view of networking configuration for an ASE."""
    upgrade_availability: Optional[Union[str, "_models.UpgradeAvailability"]] = rest_field(
        name="upgradeAvailability", visibility=["read"]
    )
    """Whether an upgrade is available for this App Service Environment. Known values are: \"None\"
     and \"Ready\"."""

    @overload
    def __init__(
        self,
        *,
        virtual_network: "_models.VirtualNetworkProfile",
        internal_load_balancing_mode: Optional[Union[str, "_models.LoadBalancingMode"]] = None,
        multi_size: Optional[str] = None,
        ipssl_address_count: Optional[int] = None,
        dns_suffix: Optional[str] = None,
        front_end_scale_factor: Optional[int] = None,
        cluster_settings: Optional[list["_models.NameValuePair"]] = None,
        user_whitelisted_ip_ranges: Optional[list[str]] = None,
        upgrade_preference: Optional[Union[str, "_models.UpgradePreference"]] = None,
        dedicated_host_count: Optional[int] = None,
        zone_redundant: Optional[bool] = None,
        custom_dns_suffix_configuration: Optional["_models.CustomDnsSuffixConfiguration"] = None,
        networking_configuration: Optional["_models.AseV3NetworkingConfiguration"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AppServiceEnvironmentPatchResource(ProxyOnlyResource):
    """ARM resource for a app service environment.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: Core resource properties.
    :vartype properties: ~azure.mgmt.web.models.AppServiceEnvironment
    """

    properties: Optional["_models.AppServiceEnvironment"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Core resource properties."""

    __flattened_items = [
        "provisioning_state",
        "status",
        "virtual_network",
        "internal_load_balancing_mode",
        "multi_size",
        "multi_role_count",
        "ipssl_address_count",
        "dns_suffix",
        "maximum_number_of_machines",
        "front_end_scale_factor",
        "suspended",
        "cluster_settings",
        "user_whitelisted_ip_ranges",
        "has_linux_workers",
        "upgrade_preference",
        "dedicated_host_count",
        "zone_redundant",
        "custom_dns_suffix_configuration",
        "networking_configuration",
        "upgrade_availability",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.AppServiceEnvironment"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class TrackedResource(Resource):
    """Tracked Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    """

    tags: Optional[dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Resource tags."""
    location: str = rest_field(visibility=["read", "create"])
    """The geo-location where the resource lives. Required."""

    @overload
    def __init__(
        self,
        *,
        location: str,
        tags: Optional[dict[str, str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AppServiceEnvironmentResource(TrackedResource):
    """App Service Environment ARM resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: Core resource properties.
    :vartype properties: ~azure.mgmt.web.models.AppServiceEnvironment
    :ivar kind: Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind.
    :vartype kind: str
    """

    properties: Optional["_models.AppServiceEnvironment"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Core resource properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind."""

    __flattened_items = [
        "provisioning_state",
        "status",
        "virtual_network",
        "internal_load_balancing_mode",
        "multi_size",
        "multi_role_count",
        "ipssl_address_count",
        "dns_suffix",
        "maximum_number_of_machines",
        "front_end_scale_factor",
        "suspended",
        "cluster_settings",
        "user_whitelisted_ip_ranges",
        "has_linux_workers",
        "upgrade_preference",
        "dedicated_host_count",
        "zone_redundant",
        "custom_dns_suffix_configuration",
        "networking_configuration",
        "upgrade_availability",
    ]

    @overload
    def __init__(
        self,
        *,
        location: str,
        tags: Optional[dict[str, str]] = None,
        properties: Optional["_models.AppServiceEnvironment"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class AppServicePlan(TrackedResource):
    """App Service plan.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: AppServicePlan resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.AppServicePlanProperties
    :ivar sku: Description of a SKU for a scalable resource.
    :vartype sku: ~azure.mgmt.web.models.SkuDescription
    :ivar extended_location: Extended Location.
    :vartype extended_location: ~azure.mgmt.web.models.ExtendedLocation
    :ivar kind: Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind.
    :vartype kind: str
    :ivar identity: Managed service identity.
    :vartype identity: ~azure.mgmt.web.models.ManagedServiceIdentity
    """

    properties: Optional["_models.AppServicePlanProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """AppServicePlan resource specific properties."""
    sku: Optional["_models.SkuDescription"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Description of a SKU for a scalable resource."""
    extended_location: Optional["_models.ExtendedLocation"] = rest_field(
        name="extendedLocation", visibility=["read", "create", "update", "delete", "query"]
    )
    """Extended Location."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind."""
    identity: Optional["_models.ManagedServiceIdentity"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Managed service identity."""

    __flattened_items = [
        "worker_tier_name",
        "status",
        "subscription",
        "hosting_environment_profile",
        "maximum_number_of_workers",
        "number_of_workers",
        "geo_region",
        "per_site_scaling",
        "elastic_scale_enabled",
        "maximum_elastic_worker_count",
        "number_of_sites",
        "is_spot",
        "spot_expiration_time",
        "free_offer_expiration_time",
        "resource_group",
        "reserved",
        "is_xenon",
        "hyper_v",
        "target_worker_count",
        "target_worker_size_id",
        "provisioning_state",
        "kube_environment_profile",
        "zone_redundant",
        "async_scaling_enabled",
        "plan_default_identity",
        "is_custom_mode",
        "registry_adapters",
        "install_scripts",
        "network",
        "storage_mounts",
        "rdp_enabled",
    ]

    @overload
    def __init__(
        self,
        *,
        location: str,
        tags: Optional[dict[str, str]] = None,
        properties: Optional["_models.AppServicePlanProperties"] = None,
        sku: Optional["_models.SkuDescription"] = None,
        extended_location: Optional["_models.ExtendedLocation"] = None,
        kind: Optional[str] = None,
        identity: Optional["_models.ManagedServiceIdentity"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class AppServicePlanPatchResource(ProxyOnlyResource):
    """ARM resource for a app service plan.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: AppServicePlanPatchResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.AppServicePlanPatchResourceProperties
    :ivar identity: Managed service identity.
    :vartype identity: ~azure.mgmt.web.models.ManagedServiceIdentity
    """

    properties: Optional["_models.AppServicePlanPatchResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """AppServicePlanPatchResource resource specific properties."""
    identity: Optional["_models.ManagedServiceIdentity"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Managed service identity."""

    __flattened_items = [
        "worker_tier_name",
        "status",
        "subscription",
        "hosting_environment_profile",
        "maximum_number_of_workers",
        "number_of_workers",
        "geo_region",
        "per_site_scaling",
        "elastic_scale_enabled",
        "maximum_elastic_worker_count",
        "number_of_sites",
        "is_spot",
        "spot_expiration_time",
        "free_offer_expiration_time",
        "resource_group",
        "reserved",
        "is_xenon",
        "hyper_v",
        "target_worker_count",
        "target_worker_size_id",
        "provisioning_state",
        "kube_environment_profile",
        "zone_redundant",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.AppServicePlanPatchResourceProperties"] = None,
        identity: Optional["_models.ManagedServiceIdentity"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class AppServicePlanPatchResourceProperties(_Model):
    """AppServicePlanPatchResource resource specific properties.

    :ivar worker_tier_name: Target worker tier assigned to the App Service plan.
    :vartype worker_tier_name: str
    :ivar status: App Service plan status. Known values are: "Ready", "Pending", and "Creating".
    :vartype status: str or ~azure.mgmt.web.models.StatusOptions
    :ivar subscription: App Service plan subscription.
    :vartype subscription: str
    :ivar hosting_environment_profile: Specification for the App Service Environment to use for the
     App Service plan.
    :vartype hosting_environment_profile: ~azure.mgmt.web.models.HostingEnvironmentProfile
    :ivar maximum_number_of_workers: Maximum number of instances that can be assigned to this App
     Service plan.
    :vartype maximum_number_of_workers: int
    :ivar number_of_workers: The number of instances that are assigned to this App Service plan.
    :vartype number_of_workers: int
    :ivar geo_region: Geographical location for the App Service plan.
    :vartype geo_region: str
    :ivar per_site_scaling: If <code>true</code>, apps assigned to this App Service plan can be
     scaled independently. If <code>false</code>, apps assigned to this App Service plan will scale
     to all instances of the plan.
    :vartype per_site_scaling: bool
    :ivar elastic_scale_enabled: ServerFarm supports ElasticScale. Apps in this plan will scale as
     if the ServerFarm was ElasticPremium sku.
    :vartype elastic_scale_enabled: bool
    :ivar maximum_elastic_worker_count: Maximum number of total workers allowed for this
     ElasticScaleEnabled App Service Plan.
    :vartype maximum_elastic_worker_count: int
    :ivar number_of_sites: Number of apps assigned to this App Service plan.
    :vartype number_of_sites: int
    :ivar is_spot: If <code>true</code>, this App Service Plan owns spot instances.
    :vartype is_spot: bool
    :ivar spot_expiration_time: The time when the server farm expires. Valid only if it is a spot
     server farm.
    :vartype spot_expiration_time: ~datetime.datetime
    :ivar free_offer_expiration_time: The time when the server farm free offer expires.
    :vartype free_offer_expiration_time: ~datetime.datetime
    :ivar resource_group: Resource group of the App Service plan.
    :vartype resource_group: str
    :ivar reserved: If Linux app service plan <code>true</code>, <code>false</code> otherwise.
    :vartype reserved: bool
    :ivar is_xenon: Obsolete: If Hyper-V container app service plan <code>true</code>,
     <code>false</code> otherwise.
    :vartype is_xenon: bool
    :ivar hyper_v: If Hyper-V container app service plan <code>true</code>, <code>false</code>
     otherwise.
    :vartype hyper_v: bool
    :ivar target_worker_count: Scaling worker count.
    :vartype target_worker_count: int
    :ivar target_worker_size_id: Scaling worker size ID.
    :vartype target_worker_size_id: int
    :ivar provisioning_state: Provisioning state of the App Service Plan. Known values are:
     "Succeeded", "Failed", "Canceled", "InProgress", and "Deleting".
    :vartype provisioning_state: str or ~azure.mgmt.web.models.ProvisioningState
    :ivar kube_environment_profile: Specification for the Kubernetes Environment to use for the App
     Service plan.
    :vartype kube_environment_profile: ~azure.mgmt.web.models.KubeEnvironmentProfile
    :ivar zone_redundant: If <code>true</code>, this App Service Plan will perform availability
     zone balancing. If <code>false</code>, this App Service Plan will not perform availability zone
     balancing.
    :vartype zone_redundant: bool
    """

    worker_tier_name: Optional[str] = rest_field(
        name="workerTierName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Target worker tier assigned to the App Service plan."""
    status: Optional[Union[str, "_models.StatusOptions"]] = rest_field(visibility=["read"])
    """App Service plan status. Known values are: \"Ready\", \"Pending\", and \"Creating\"."""
    subscription: Optional[str] = rest_field(visibility=["read"])
    """App Service plan subscription."""
    hosting_environment_profile: Optional["_models.HostingEnvironmentProfile"] = rest_field(
        name="hostingEnvironmentProfile", visibility=["read", "create"]
    )
    """Specification for the App Service Environment to use for the App Service plan."""
    maximum_number_of_workers: Optional[int] = rest_field(name="maximumNumberOfWorkers", visibility=["read"])
    """Maximum number of instances that can be assigned to this App Service plan."""
    number_of_workers: Optional[int] = rest_field(name="numberOfWorkers", visibility=["read"])
    """The number of instances that are assigned to this App Service plan."""
    geo_region: Optional[str] = rest_field(name="geoRegion", visibility=["read"])
    """Geographical location for the App Service plan."""
    per_site_scaling: Optional[bool] = rest_field(
        name="perSiteScaling", visibility=["read", "create", "update", "delete", "query"]
    )
    """If <code>true</code>, apps assigned to this App Service plan can be scaled independently. If
     <code>false</code>, apps assigned to this App Service plan will scale to all instances of the
     plan."""
    elastic_scale_enabled: Optional[bool] = rest_field(
        name="elasticScaleEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """ServerFarm supports ElasticScale. Apps in this plan will scale as if the ServerFarm was
     ElasticPremium sku."""
    maximum_elastic_worker_count: Optional[int] = rest_field(
        name="maximumElasticWorkerCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """Maximum number of total workers allowed for this ElasticScaleEnabled App Service Plan."""
    number_of_sites: Optional[int] = rest_field(name="numberOfSites", visibility=["read"])
    """Number of apps assigned to this App Service plan."""
    is_spot: Optional[bool] = rest_field(name="isSpot", visibility=["read", "create", "update", "delete", "query"])
    """If <code>true</code>, this App Service Plan owns spot instances."""
    spot_expiration_time: Optional[datetime.datetime] = rest_field(
        name="spotExpirationTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The time when the server farm expires. Valid only if it is a spot server farm."""
    free_offer_expiration_time: Optional[datetime.datetime] = rest_field(
        name="freeOfferExpirationTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The time when the server farm free offer expires."""
    resource_group: Optional[str] = rest_field(name="resourceGroup", visibility=["read"])
    """Resource group of the App Service plan."""
    reserved: Optional[bool] = rest_field(visibility=["read", "create"])
    """If Linux app service plan <code>true</code>, <code>false</code> otherwise."""
    is_xenon: Optional[bool] = rest_field(name="isXenon", visibility=["read", "create"])
    """Obsolete: If Hyper-V container app service plan <code>true</code>, <code>false</code>
     otherwise."""
    hyper_v: Optional[bool] = rest_field(name="hyperV", visibility=["read", "create"])
    """If Hyper-V container app service plan <code>true</code>, <code>false</code> otherwise."""
    target_worker_count: Optional[int] = rest_field(
        name="targetWorkerCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """Scaling worker count."""
    target_worker_size_id: Optional[int] = rest_field(
        name="targetWorkerSizeId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Scaling worker size ID."""
    provisioning_state: Optional[Union[str, "_models.ProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read"]
    )
    """Provisioning state of the App Service Plan. Known values are: \"Succeeded\", \"Failed\",
     \"Canceled\", \"InProgress\", and \"Deleting\"."""
    kube_environment_profile: Optional["_models.KubeEnvironmentProfile"] = rest_field(
        name="kubeEnvironmentProfile", visibility=["read", "create", "update", "delete", "query"]
    )
    """Specification for the Kubernetes Environment to use for the App Service plan."""
    zone_redundant: Optional[bool] = rest_field(
        name="zoneRedundant", visibility=["read", "create", "update", "delete", "query"]
    )
    """If <code>true</code>, this App Service Plan will perform availability zone balancing. If
     <code>false</code>, this App Service Plan will not perform availability zone balancing."""

    @overload
    def __init__(
        self,
        *,
        worker_tier_name: Optional[str] = None,
        hosting_environment_profile: Optional["_models.HostingEnvironmentProfile"] = None,
        per_site_scaling: Optional[bool] = None,
        elastic_scale_enabled: Optional[bool] = None,
        maximum_elastic_worker_count: Optional[int] = None,
        is_spot: Optional[bool] = None,
        spot_expiration_time: Optional[datetime.datetime] = None,
        free_offer_expiration_time: Optional[datetime.datetime] = None,
        reserved: Optional[bool] = None,
        is_xenon: Optional[bool] = None,
        hyper_v: Optional[bool] = None,
        target_worker_count: Optional[int] = None,
        target_worker_size_id: Optional[int] = None,
        kube_environment_profile: Optional["_models.KubeEnvironmentProfile"] = None,
        zone_redundant: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AppServicePlanProperties(_Model):
    """AppServicePlan resource specific properties.

    :ivar worker_tier_name: Target worker tier assigned to the App Service plan.
    :vartype worker_tier_name: str
    :ivar status: App Service plan status. Known values are: "Ready", "Pending", and "Creating".
    :vartype status: str or ~azure.mgmt.web.models.StatusOptions
    :ivar subscription: App Service plan subscription.
    :vartype subscription: str
    :ivar hosting_environment_profile: Specification for the App Service Environment to use for the
     App Service plan.
    :vartype hosting_environment_profile: ~azure.mgmt.web.models.HostingEnvironmentProfile
    :ivar maximum_number_of_workers: Maximum number of instances that can be assigned to this App
     Service plan.
    :vartype maximum_number_of_workers: int
    :ivar number_of_workers: The number of instances that are assigned to this App Service plan.
    :vartype number_of_workers: int
    :ivar geo_region: Geographical location for the App Service plan.
    :vartype geo_region: str
    :ivar per_site_scaling: If <code>true</code>, apps assigned to this App Service plan can be
     scaled independently. If <code>false</code>, apps assigned to this App Service plan will scale
     to all instances of the plan.
    :vartype per_site_scaling: bool
    :ivar elastic_scale_enabled: ServerFarm supports ElasticScale. Apps in this plan will scale as
     if the ServerFarm was ElasticPremium sku.
    :vartype elastic_scale_enabled: bool
    :ivar maximum_elastic_worker_count: Maximum number of total workers allowed for this
     ElasticScaleEnabled App Service Plan.
    :vartype maximum_elastic_worker_count: int
    :ivar number_of_sites: Number of apps assigned to this App Service plan.
    :vartype number_of_sites: int
    :ivar is_spot: If <code>true</code>, this App Service Plan owns spot instances.
    :vartype is_spot: bool
    :ivar spot_expiration_time: The time when the server farm expires. Valid only if it is a spot
     server farm.
    :vartype spot_expiration_time: ~datetime.datetime
    :ivar free_offer_expiration_time: The time when the server farm free offer expires.
    :vartype free_offer_expiration_time: ~datetime.datetime
    :ivar resource_group: Resource group of the App Service plan.
    :vartype resource_group: str
    :ivar reserved: If Linux app service plan <code>true</code>, <code>false</code> otherwise.
    :vartype reserved: bool
    :ivar is_xenon: Obsolete: If Hyper-V container app service plan <code>true</code>,
     <code>false</code> otherwise.
    :vartype is_xenon: bool
    :ivar hyper_v: If Hyper-V container app service plan <code>true</code>, <code>false</code>
     otherwise.
    :vartype hyper_v: bool
    :ivar target_worker_count: Scaling worker count.
    :vartype target_worker_count: int
    :ivar target_worker_size_id: Scaling worker size ID.
    :vartype target_worker_size_id: int
    :ivar provisioning_state: Provisioning state of the App Service Plan. Known values are:
     "Succeeded", "Failed", "Canceled", "InProgress", and "Deleting".
    :vartype provisioning_state: str or ~azure.mgmt.web.models.ProvisioningState
    :ivar kube_environment_profile: Specification for the Kubernetes Environment to use for the App
     Service plan.
    :vartype kube_environment_profile: ~azure.mgmt.web.models.KubeEnvironmentProfile
    :ivar zone_redundant: If <code>true</code>, this App Service Plan will perform availability
     zone balancing. If <code>false</code>, this App Service Plan will not perform availability zone
     balancing.
    :vartype zone_redundant: bool
    :ivar async_scaling_enabled: If <code>true</code>, this App Service Plan will attempt to scale
     asynchronously if there are insufficient workers to scale synchronously. If <code>false</code>,
     this App Service Plan will only attempt sync scaling.
    :vartype async_scaling_enabled: bool
    :ivar plan_default_identity: Identity to use by platform for various features and integrations
     using managed identity.
    :vartype plan_default_identity: ~azure.mgmt.web.models.DefaultIdentity
    :ivar is_custom_mode: Whether this server farm is in custom mode.
    :vartype is_custom_mode: bool
    :ivar registry_adapters: Registry adapters associated with this App Service plan.
    :vartype registry_adapters: list[~azure.mgmt.web.models.RegistryAdapter]
    :ivar install_scripts: Install scripts associated with this App Service plan.
    :vartype install_scripts: list[~azure.mgmt.web.models.InstallScript]
    :ivar network: All network settings for the server farm.
    :vartype network: ~azure.mgmt.web.models.ServerFarmNetworkSettings
    :ivar storage_mounts: Storage mounts associated with this App Service plan.
    :vartype storage_mounts: list[~azure.mgmt.web.models.StorageMount]
    :ivar rdp_enabled: If <code>true</code>, RDP access is enabled for this App Service plan. Only
     applicable for IsCustomMode ASPs. If <code>false</code>, RDP access is disabled.
    :vartype rdp_enabled: bool
    """

    worker_tier_name: Optional[str] = rest_field(
        name="workerTierName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Target worker tier assigned to the App Service plan."""
    status: Optional[Union[str, "_models.StatusOptions"]] = rest_field(visibility=["read"])
    """App Service plan status. Known values are: \"Ready\", \"Pending\", and \"Creating\"."""
    subscription: Optional[str] = rest_field(visibility=["read"])
    """App Service plan subscription."""
    hosting_environment_profile: Optional["_models.HostingEnvironmentProfile"] = rest_field(
        name="hostingEnvironmentProfile", visibility=["read", "create"]
    )
    """Specification for the App Service Environment to use for the App Service plan."""
    maximum_number_of_workers: Optional[int] = rest_field(name="maximumNumberOfWorkers", visibility=["read"])
    """Maximum number of instances that can be assigned to this App Service plan."""
    number_of_workers: Optional[int] = rest_field(name="numberOfWorkers", visibility=["read"])
    """The number of instances that are assigned to this App Service plan."""
    geo_region: Optional[str] = rest_field(name="geoRegion", visibility=["read"])
    """Geographical location for the App Service plan."""
    per_site_scaling: Optional[bool] = rest_field(
        name="perSiteScaling", visibility=["read", "create", "update", "delete", "query"]
    )
    """If <code>true</code>, apps assigned to this App Service plan can be scaled independently. If
     <code>false</code>, apps assigned to this App Service plan will scale to all instances of the
     plan."""
    elastic_scale_enabled: Optional[bool] = rest_field(
        name="elasticScaleEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """ServerFarm supports ElasticScale. Apps in this plan will scale as if the ServerFarm was
     ElasticPremium sku."""
    maximum_elastic_worker_count: Optional[int] = rest_field(
        name="maximumElasticWorkerCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """Maximum number of total workers allowed for this ElasticScaleEnabled App Service Plan."""
    number_of_sites: Optional[int] = rest_field(name="numberOfSites", visibility=["read"])
    """Number of apps assigned to this App Service plan."""
    is_spot: Optional[bool] = rest_field(name="isSpot", visibility=["read", "create", "update", "delete", "query"])
    """If <code>true</code>, this App Service Plan owns spot instances."""
    spot_expiration_time: Optional[datetime.datetime] = rest_field(
        name="spotExpirationTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The time when the server farm expires. Valid only if it is a spot server farm."""
    free_offer_expiration_time: Optional[datetime.datetime] = rest_field(
        name="freeOfferExpirationTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The time when the server farm free offer expires."""
    resource_group: Optional[str] = rest_field(name="resourceGroup", visibility=["read"])
    """Resource group of the App Service plan."""
    reserved: Optional[bool] = rest_field(visibility=["read", "create"])
    """If Linux app service plan <code>true</code>, <code>false</code> otherwise."""
    is_xenon: Optional[bool] = rest_field(name="isXenon", visibility=["read", "create"])
    """Obsolete: If Hyper-V container app service plan <code>true</code>, <code>false</code>
     otherwise."""
    hyper_v: Optional[bool] = rest_field(name="hyperV", visibility=["read", "create"])
    """If Hyper-V container app service plan <code>true</code>, <code>false</code> otherwise."""
    target_worker_count: Optional[int] = rest_field(
        name="targetWorkerCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """Scaling worker count."""
    target_worker_size_id: Optional[int] = rest_field(
        name="targetWorkerSizeId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Scaling worker size ID."""
    provisioning_state: Optional[Union[str, "_models.ProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read"]
    )
    """Provisioning state of the App Service Plan. Known values are: \"Succeeded\", \"Failed\",
     \"Canceled\", \"InProgress\", and \"Deleting\"."""
    kube_environment_profile: Optional["_models.KubeEnvironmentProfile"] = rest_field(
        name="kubeEnvironmentProfile", visibility=["read", "create", "update", "delete", "query"]
    )
    """Specification for the Kubernetes Environment to use for the App Service plan."""
    zone_redundant: Optional[bool] = rest_field(
        name="zoneRedundant", visibility=["read", "create", "update", "delete", "query"]
    )
    """If <code>true</code>, this App Service Plan will perform availability zone balancing. If
     <code>false</code>, this App Service Plan will not perform availability zone balancing."""
    async_scaling_enabled: Optional[bool] = rest_field(
        name="asyncScalingEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """If <code>true</code>, this App Service Plan will attempt to scale asynchronously if there are
     insufficient workers to scale synchronously. If <code>false</code>, this App Service Plan will
     only attempt sync scaling."""
    plan_default_identity: Optional["_models.DefaultIdentity"] = rest_field(
        name="planDefaultIdentity", visibility=["read", "create", "update", "delete", "query"]
    )
    """Identity to use by platform for various features and integrations using managed identity."""
    is_custom_mode: Optional[bool] = rest_field(
        name="isCustomMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether this server farm is in custom mode."""
    registry_adapters: Optional[list["_models.RegistryAdapter"]] = rest_field(
        name="registryAdapters", visibility=["read", "create", "update", "delete", "query"]
    )
    """Registry adapters associated with this App Service plan."""
    install_scripts: Optional[list["_models.InstallScript"]] = rest_field(
        name="installScripts", visibility=["read", "create", "update", "delete", "query"]
    )
    """Install scripts associated with this App Service plan."""
    network: Optional["_models.ServerFarmNetworkSettings"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """All network settings for the server farm."""
    storage_mounts: Optional[list["_models.StorageMount"]] = rest_field(
        name="storageMounts", visibility=["read", "create", "update", "delete", "query"]
    )
    """Storage mounts associated with this App Service plan."""
    rdp_enabled: Optional[bool] = rest_field(
        name="rdpEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """If <code>true</code>, RDP access is enabled for this App Service plan. Only applicable for
     IsCustomMode ASPs. If <code>false</code>, RDP access is disabled."""

    @overload
    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        worker_tier_name: Optional[str] = None,
        hosting_environment_profile: Optional["_models.HostingEnvironmentProfile"] = None,
        per_site_scaling: Optional[bool] = None,
        elastic_scale_enabled: Optional[bool] = None,
        maximum_elastic_worker_count: Optional[int] = None,
        is_spot: Optional[bool] = None,
        spot_expiration_time: Optional[datetime.datetime] = None,
        free_offer_expiration_time: Optional[datetime.datetime] = None,
        reserved: Optional[bool] = None,
        is_xenon: Optional[bool] = None,
        hyper_v: Optional[bool] = None,
        target_worker_count: Optional[int] = None,
        target_worker_size_id: Optional[int] = None,
        kube_environment_profile: Optional["_models.KubeEnvironmentProfile"] = None,
        zone_redundant: Optional[bool] = None,
        async_scaling_enabled: Optional[bool] = None,
        plan_default_identity: Optional["_models.DefaultIdentity"] = None,
        is_custom_mode: Optional[bool] = None,
        registry_adapters: Optional[list["_models.RegistryAdapter"]] = None,
        install_scripts: Optional[list["_models.InstallScript"]] = None,
        network: Optional["_models.ServerFarmNetworkSettings"] = None,
        storage_mounts: Optional[list["_models.StorageMount"]] = None,
        rdp_enabled: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ArcConfiguration(_Model):
    """ArcConfiguration.

    :ivar artifacts_storage_type: Known values are: "LocalNode" and "NetworkFileSystem".
    :vartype artifacts_storage_type: str or ~azure.mgmt.web.models.StorageType
    :ivar artifact_storage_class_name:
    :vartype artifact_storage_class_name: str
    :ivar artifact_storage_mount_path:
    :vartype artifact_storage_mount_path: str
    :ivar artifact_storage_node_name:
    :vartype artifact_storage_node_name: str
    :ivar artifact_storage_access_mode:
    :vartype artifact_storage_access_mode: str
    :ivar front_end_service_configuration:
    :vartype front_end_service_configuration: ~azure.mgmt.web.models.FrontEndConfiguration
    :ivar kube_config:
    :vartype kube_config: str
    """

    artifacts_storage_type: Optional[Union[str, "_models.StorageType"]] = rest_field(
        name="artifactsStorageType", visibility=["read", "create"]
    )
    """Known values are: \"LocalNode\" and \"NetworkFileSystem\"."""
    artifact_storage_class_name: Optional[str] = rest_field(
        name="artifactStorageClassName", visibility=["read", "create"]
    )
    artifact_storage_mount_path: Optional[str] = rest_field(
        name="artifactStorageMountPath", visibility=["read", "create"]
    )
    artifact_storage_node_name: Optional[str] = rest_field(
        name="artifactStorageNodeName", visibility=["read", "create"]
    )
    artifact_storage_access_mode: Optional[str] = rest_field(
        name="artifactStorageAccessMode", visibility=["read", "create"]
    )
    front_end_service_configuration: Optional["_models.FrontEndConfiguration"] = rest_field(
        name="frontEndServiceConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    kube_config: Optional[str] = rest_field(name="kubeConfig", visibility=["create", "update"])

    @overload
    def __init__(
        self,
        *,
        artifacts_storage_type: Optional[Union[str, "_models.StorageType"]] = None,
        artifact_storage_class_name: Optional[str] = None,
        artifact_storage_mount_path: Optional[str] = None,
        artifact_storage_node_name: Optional[str] = None,
        artifact_storage_access_mode: Optional[str] = None,
        front_end_service_configuration: Optional["_models.FrontEndConfiguration"] = None,
        kube_config: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ArmIdWrapper(_Model):
    """A wrapper for an ARM resource id.

    :ivar id:
    :vartype id: str
    """

    id: Optional[str] = rest_field(visibility=["read"])


class ArmPlan(_Model):
    """The plan object in Azure Resource Manager, represents a marketplace plan.

    :ivar name: The name.
    :vartype name: str
    :ivar publisher: The publisher.
    :vartype publisher: str
    :ivar product: The product.
    :vartype product: str
    :ivar promotion_code: The promotion code.
    :vartype promotion_code: str
    :ivar version: Version of product.
    :vartype version: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The name."""
    publisher: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The publisher."""
    product: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The product."""
    promotion_code: Optional[str] = rest_field(
        name="promotionCode", visibility=["read", "create", "update", "delete", "query"]
    )
    """The promotion code."""
    version: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Version of product."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        publisher: Optional[str] = None,
        product: Optional[str] = None,
        promotion_code: Optional[str] = None,
        version: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AseRegion(ProxyOnlyResource):
    """ASE region.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: ASE region resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.AseRegionProperties
    """

    properties: Optional["_models.AseRegionProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """ASE region resource specific properties."""

    __flattened_items = [
        "display_name",
        "standard",
        "dedicated_host",
        "zone_redundant",
        "available_sku",
        "available_os",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.AseRegionProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class AseRegionProperties(_Model):
    """ASE region resource specific properties.

    :ivar display_name: Display name for region.
    :vartype display_name: str
    :ivar standard: Is region standard.
    :vartype standard: bool
    :ivar dedicated_host: Dedicated host enabled.
    :vartype dedicated_host: bool
    :ivar zone_redundant: Zone redundant deployment enabled.
    :vartype zone_redundant: bool
    :ivar available_sku: Available Skus in region.
    :vartype available_sku: list[str]
    :ivar available_os: Available OSs in region.
    :vartype available_os: list[str]
    """

    display_name: Optional[str] = rest_field(name="displayName", visibility=["read"])
    """Display name for region."""
    standard: Optional[bool] = rest_field(visibility=["read"])
    """Is region standard."""
    dedicated_host: Optional[bool] = rest_field(name="dedicatedHost", visibility=["read"])
    """Dedicated host enabled."""
    zone_redundant: Optional[bool] = rest_field(name="zoneRedundant", visibility=["read"])
    """Zone redundant deployment enabled."""
    available_sku: Optional[list[str]] = rest_field(
        name="availableSku", visibility=["read", "create", "update", "delete", "query"]
    )
    """Available Skus in region."""
    available_os: Optional[list[str]] = rest_field(
        name="availableOS", visibility=["read", "create", "update", "delete", "query"]
    )
    """Available OSs in region."""

    @overload
    def __init__(
        self,
        *,
        available_sku: Optional[list[str]] = None,
        available_os: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AseV3NetworkingConfiguration(ProxyResource):
    """Full view of networking configuration for an ASE.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: AseV3NetworkingConfiguration resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.AseV3NetworkingConfigurationProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.AseV3NetworkingConfigurationProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """AseV3NetworkingConfiguration resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "windows_outbound_ip_addresses",
        "linux_outbound_ip_addresses",
        "external_inbound_ip_addresses",
        "internal_inbound_ip_addresses",
        "allow_new_private_endpoint_connections",
        "ftp_enabled",
        "remote_debug_enabled",
        "inbound_ip_address_override",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.AseV3NetworkingConfigurationProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class AseV3NetworkingConfigurationProperties(_Model):
    """AseV3NetworkingConfiguration resource specific properties.

    :ivar windows_outbound_ip_addresses:
    :vartype windows_outbound_ip_addresses: list[str]
    :ivar linux_outbound_ip_addresses:
    :vartype linux_outbound_ip_addresses: list[str]
    :ivar external_inbound_ip_addresses:
    :vartype external_inbound_ip_addresses: list[str]
    :ivar internal_inbound_ip_addresses:
    :vartype internal_inbound_ip_addresses: list[str]
    :ivar allow_new_private_endpoint_connections: Property to enable and disable new private
     endpoint connection creation on ASE.
    :vartype allow_new_private_endpoint_connections: bool
    :ivar ftp_enabled: Property to enable and disable FTP on ASEV3.
    :vartype ftp_enabled: bool
    :ivar remote_debug_enabled: Property to enable and disable Remote Debug on ASEV3.
    :vartype remote_debug_enabled: bool
    :ivar inbound_ip_address_override: Customer provided Inbound IP Address. Only able to be set on
     Ase create.
    :vartype inbound_ip_address_override: str
    """

    windows_outbound_ip_addresses: Optional[list[str]] = rest_field(
        name="windowsOutboundIpAddresses", visibility=["read"]
    )
    linux_outbound_ip_addresses: Optional[list[str]] = rest_field(name="linuxOutboundIpAddresses", visibility=["read"])
    external_inbound_ip_addresses: Optional[list[str]] = rest_field(
        name="externalInboundIpAddresses", visibility=["read"]
    )
    internal_inbound_ip_addresses: Optional[list[str]] = rest_field(
        name="internalInboundIpAddresses", visibility=["read"]
    )
    allow_new_private_endpoint_connections: Optional[bool] = rest_field(
        name="allowNewPrivateEndpointConnections", visibility=["read", "create", "update", "delete", "query"]
    )
    """Property to enable and disable new private endpoint connection creation on ASE."""
    ftp_enabled: Optional[bool] = rest_field(
        name="ftpEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Property to enable and disable FTP on ASEV3."""
    remote_debug_enabled: Optional[bool] = rest_field(
        name="remoteDebugEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Property to enable and disable Remote Debug on ASEV3."""
    inbound_ip_address_override: Optional[str] = rest_field(
        name="inboundIpAddressOverride", visibility=["read", "create", "update", "delete", "query"]
    )
    """Customer provided Inbound IP Address. Only able to be set on Ase create."""

    @overload
    def __init__(
        self,
        *,
        allow_new_private_endpoint_connections: Optional[bool] = None,
        ftp_enabled: Optional[bool] = None,
        remote_debug_enabled: Optional[bool] = None,
        inbound_ip_address_override: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AuthPlatform(_Model):
    """The configuration settings of the platform of App Service Authentication/Authorization.

    :ivar enabled: <code>true</code> if the Authentication / Authorization feature is enabled for
     the current app; otherwise, <code>false</code>.
    :vartype enabled: bool
    :ivar runtime_version: The RuntimeVersion of the Authentication / Authorization feature in use
     for the current app. The setting in this value can control the behavior of certain features in
     the Authentication / Authorization module.
    :vartype runtime_version: str
    :ivar config_file_path: The path of the config file containing auth settings if they come from
     a file. If the path is relative, base will the site's root directory.
    :vartype config_file_path: str
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> if the Authentication / Authorization feature is enabled for the current app;
     otherwise, <code>false</code>."""
    runtime_version: Optional[str] = rest_field(
        name="runtimeVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """The RuntimeVersion of the Authentication / Authorization feature in use for the current app.
     The setting in this value can control the behavior of certain features in the Authentication /
     Authorization module."""
    config_file_path: Optional[str] = rest_field(
        name="configFilePath", visibility=["read", "create", "update", "delete", "query"]
    )
    """The path of the config file containing auth settings if they come from a file. If the path is
     relative, base will the site's root directory."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        runtime_version: Optional[str] = None,
        config_file_path: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AutoHealActions(_Model):
    """Actions which to take by the auto-heal module when a rule is triggered.

    :ivar action_type: Predefined action to be taken. Known values are: "Recycle", "LogEvent", and
     "CustomAction".
    :vartype action_type: str or ~azure.mgmt.web.models.AutoHealActionType
    :ivar custom_action: Custom action to be taken.
    :vartype custom_action: ~azure.mgmt.web.models.AutoHealCustomAction
    :ivar min_process_execution_time: Minimum time the process must execute before taking the
     action.
    :vartype min_process_execution_time: str
    """

    action_type: Optional[Union[str, "_models.AutoHealActionType"]] = rest_field(
        name="actionType", visibility=["read", "create", "update", "delete", "query"]
    )
    """Predefined action to be taken. Known values are: \"Recycle\", \"LogEvent\", and
     \"CustomAction\"."""
    custom_action: Optional["_models.AutoHealCustomAction"] = rest_field(
        name="customAction", visibility=["read", "create", "update", "delete", "query"]
    )
    """Custom action to be taken."""
    min_process_execution_time: Optional[str] = rest_field(
        name="minProcessExecutionTime", visibility=["read", "create", "update", "delete", "query"]
    )
    """Minimum time the process must execute before taking the action."""

    @overload
    def __init__(
        self,
        *,
        action_type: Optional[Union[str, "_models.AutoHealActionType"]] = None,
        custom_action: Optional["_models.AutoHealCustomAction"] = None,
        min_process_execution_time: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AutoHealCustomAction(_Model):
    """Custom action to be executed when an auto heal rule is triggered.

    :ivar exe: Executable to be run.
    :vartype exe: str
    :ivar parameters: Parameters for the executable.
    :vartype parameters: str
    """

    exe: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Executable to be run."""
    parameters: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Parameters for the executable."""

    @overload
    def __init__(
        self,
        *,
        exe: Optional[str] = None,
        parameters: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AutoHealRules(_Model):
    """Rules that can be defined for auto-heal.

    :ivar triggers: Conditions that describe when to execute the auto-heal actions.
    :vartype triggers: ~azure.mgmt.web.models.AutoHealTriggers
    :ivar actions: Actions to be executed when a rule is triggered.
    :vartype actions: ~azure.mgmt.web.models.AutoHealActions
    """

    triggers: Optional["_models.AutoHealTriggers"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Conditions that describe when to execute the auto-heal actions."""
    actions: Optional["_models.AutoHealActions"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Actions to be executed when a rule is triggered."""

    @overload
    def __init__(
        self,
        *,
        triggers: Optional["_models.AutoHealTriggers"] = None,
        actions: Optional["_models.AutoHealActions"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AutoHealTriggers(_Model):
    """Triggers for auto-heal.

    :ivar requests: A rule based on total requests.
    :vartype requests: ~azure.mgmt.web.models.RequestsBasedTrigger
    :ivar private_bytes_in_kb: A rule based on private bytes.
    :vartype private_bytes_in_kb: int
    :ivar status_codes: A rule based on status codes.
    :vartype status_codes: list[~azure.mgmt.web.models.StatusCodesBasedTrigger]
    :ivar slow_requests: A rule based on request execution time.
    :vartype slow_requests: ~azure.mgmt.web.models.SlowRequestsBasedTrigger
    :ivar slow_requests_with_path: A rule based on multiple Slow Requests Rule with path.
    :vartype slow_requests_with_path: list[~azure.mgmt.web.models.SlowRequestsBasedTrigger]
    :ivar status_codes_range: A rule based on status codes ranges.
    :vartype status_codes_range: list[~azure.mgmt.web.models.StatusCodesRangeBasedTrigger]
    """

    requests: Optional["_models.RequestsBasedTrigger"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """A rule based on total requests."""
    private_bytes_in_kb: Optional[int] = rest_field(
        name="privateBytesInKB", visibility=["read", "create", "update", "delete", "query"]
    )
    """A rule based on private bytes."""
    status_codes: Optional[list["_models.StatusCodesBasedTrigger"]] = rest_field(
        name="statusCodes", visibility=["read", "create", "update", "delete", "query"]
    )
    """A rule based on status codes."""
    slow_requests: Optional["_models.SlowRequestsBasedTrigger"] = rest_field(
        name="slowRequests", visibility=["read", "create", "update", "delete", "query"]
    )
    """A rule based on request execution time."""
    slow_requests_with_path: Optional[list["_models.SlowRequestsBasedTrigger"]] = rest_field(
        name="slowRequestsWithPath", visibility=["read", "create", "update", "delete", "query"]
    )
    """A rule based on multiple Slow Requests Rule with path."""
    status_codes_range: Optional[list["_models.StatusCodesRangeBasedTrigger"]] = rest_field(
        name="statusCodesRange", visibility=["read", "create", "update", "delete", "query"]
    )
    """A rule based on status codes ranges."""

    @overload
    def __init__(
        self,
        *,
        requests: Optional["_models.RequestsBasedTrigger"] = None,
        private_bytes_in_kb: Optional[int] = None,
        status_codes: Optional[list["_models.StatusCodesBasedTrigger"]] = None,
        slow_requests: Optional["_models.SlowRequestsBasedTrigger"] = None,
        slow_requests_with_path: Optional[list["_models.SlowRequestsBasedTrigger"]] = None,
        status_codes_range: Optional[list["_models.StatusCodesRangeBasedTrigger"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AzureActiveDirectory(_Model):
    """The configuration settings of the Azure Active directory provider.

    :ivar enabled: <code>false</code> if the Azure Active Directory provider should not be enabled
     despite the set registration; otherwise, <code>true</code>.
    :vartype enabled: bool
    :ivar registration: The configuration settings of the Azure Active Directory app registration.
    :vartype registration: ~azure.mgmt.web.models.AzureActiveDirectoryRegistration
    :ivar login: The configuration settings of the Azure Active Directory login flow.
    :vartype login: ~azure.mgmt.web.models.AzureActiveDirectoryLogin
    :ivar validation: The configuration settings of the Azure Active Directory token validation
     flow.
    :vartype validation: ~azure.mgmt.web.models.AzureActiveDirectoryValidation
    :ivar is_auto_provisioned: Gets a value indicating whether the Azure AD configuration was
     auto-provisioned using 1st party tooling. This is an internal flag primarily intended to
     support the Azure Management Portal. Users should not read or write to this property.
    :vartype is_auto_provisioned: bool
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>false</code> if the Azure Active Directory provider should not be enabled despite the set
     registration; otherwise, <code>true</code>."""
    registration: Optional["_models.AzureActiveDirectoryRegistration"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the Azure Active Directory app registration."""
    login: Optional["_models.AzureActiveDirectoryLogin"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the Azure Active Directory login flow."""
    validation: Optional["_models.AzureActiveDirectoryValidation"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the Azure Active Directory token validation flow."""
    is_auto_provisioned: Optional[bool] = rest_field(
        name="isAutoProvisioned", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets a value indicating whether the Azure AD configuration was auto-provisioned using 1st party
     tooling. This is an internal flag primarily intended to support the Azure Management Portal.
     Users should not read or write to this property."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        registration: Optional["_models.AzureActiveDirectoryRegistration"] = None,
        login: Optional["_models.AzureActiveDirectoryLogin"] = None,
        validation: Optional["_models.AzureActiveDirectoryValidation"] = None,
        is_auto_provisioned: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AzureActiveDirectoryLogin(_Model):
    """The configuration settings of the Azure Active Directory login flow.

    :ivar login_parameters: Login parameters to send to the OpenID Connect authorization endpoint
     when a user logs in. Each parameter must be in the form "key=value".
    :vartype login_parameters: list[str]
    :ivar disable_www_authenticate: <code>true</code> if the www-authenticate provider should be
     omitted from the request; otherwise, <code>false</code>.
    :vartype disable_www_authenticate: bool
    """

    login_parameters: Optional[list[str]] = rest_field(
        name="loginParameters", visibility=["read", "create", "update", "delete", "query"]
    )
    """Login parameters to send to the OpenID Connect authorization endpoint when a user logs in. Each
     parameter must be in the form \"key=value\"."""
    disable_www_authenticate: Optional[bool] = rest_field(
        name="disableWWWAuthenticate", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if the www-authenticate provider should be omitted from the request;
     otherwise, <code>false</code>."""

    @overload
    def __init__(
        self,
        *,
        login_parameters: Optional[list[str]] = None,
        disable_www_authenticate: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AzureActiveDirectoryRegistration(_Model):
    """The configuration settings of the Azure Active Directory app registration.

    :ivar open_id_issuer: The OpenID Connect Issuer URI that represents the entity which issues
     access tokens for this application. When using Azure Active Directory, this value is the URI of
     the directory tenant, e.g. ``https://login.microsoftonline.com/v2.0/{tenant-guid}/``. This URI
     is a case-sensitive identifier for the token issuer. More information on OpenID Connect
     Discovery: `http://openid.net/specs/openid-connect-discovery-1_0.html
     <http://openid.net/specs/openid-connect-discovery-1_0.html>`_.
    :vartype open_id_issuer: str
    :ivar client_id: The Client ID of this relying party application, known as the client_id. This
     setting is required for enabling OpenID Connection authentication with Azure Active Directory
     or other 3rd party OpenID Connect providers. More information on OpenID Connect:
     `http://openid.net/specs/openid-connect-core-1_0.html
     <http://openid.net/specs/openid-connect-core-1_0.html>`_.
    :vartype client_id: str
    :ivar client_secret_setting_name: The app setting name that contains the client secret of the
     relying party application.
    :vartype client_secret_setting_name: str
    :ivar client_secret_certificate_thumbprint: An alternative to the client secret, that is the
     thumbprint of a certificate used for signing purposes. This property acts as a replacement for
     the Client Secret. It is also optional.
    :vartype client_secret_certificate_thumbprint: str
    :ivar client_secret_certificate_subject_alternative_name: An alternative to the client secret
     thumbprint, that is the subject alternative name of a certificate used for signing purposes.
     This property acts as a replacement for the Client Secret Certificate Thumbprint. It is also
     optional.
    :vartype client_secret_certificate_subject_alternative_name: str
    :ivar client_secret_certificate_issuer: An alternative to the client secret thumbprint, that is
     the issuer of a certificate used for signing purposes. This property acts as a replacement for
     the Client Secret Certificate Thumbprint. It is also optional.
    :vartype client_secret_certificate_issuer: str
    """

    open_id_issuer: Optional[str] = rest_field(
        name="openIdIssuer", visibility=["read", "create", "update", "delete", "query"]
    )
    """The OpenID Connect Issuer URI that represents the entity which issues access tokens for this
     application. When using Azure Active Directory, this value is the URI of the directory tenant,
     e.g. ``https://login.microsoftonline.com/v2.0/{tenant-guid}/``. This URI is a case-sensitive
     identifier for the token issuer. More information on OpenID Connect Discovery:
     `http://openid.net/specs/openid-connect-discovery-1_0.html
     <http://openid.net/specs/openid-connect-discovery-1_0.html>`_."""
    client_id: Optional[str] = rest_field(name="clientId", visibility=["read", "create", "update", "delete", "query"])
    """The Client ID of this relying party application, known as the client_id. This setting is
     required for enabling OpenID Connection authentication with Azure Active Directory or other 3rd
     party OpenID Connect providers. More information on OpenID Connect:
     `http://openid.net/specs/openid-connect-core-1_0.html
     <http://openid.net/specs/openid-connect-core-1_0.html>`_."""
    client_secret_setting_name: Optional[str] = rest_field(
        name="clientSecretSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The app setting name that contains the client secret of the relying party application."""
    client_secret_certificate_thumbprint: Optional[str] = rest_field(
        name="clientSecretCertificateThumbprint", visibility=["read", "create", "update", "delete", "query"]
    )
    """An alternative to the client secret, that is the thumbprint of a certificate used for signing
     purposes. This property acts as a replacement for the Client Secret. It is also optional."""
    client_secret_certificate_subject_alternative_name: Optional[str] = rest_field(
        name="clientSecretCertificateSubjectAlternativeName", visibility=["read", "create", "update", "delete", "query"]
    )
    """An alternative to the client secret thumbprint, that is the subject alternative name of a
     certificate used for signing purposes. This property acts as a replacement for the Client
     Secret Certificate Thumbprint. It is also optional."""
    client_secret_certificate_issuer: Optional[str] = rest_field(
        name="clientSecretCertificateIssuer", visibility=["read", "create", "update", "delete", "query"]
    )
    """An alternative to the client secret thumbprint, that is the issuer of a certificate used for
     signing purposes. This property acts as a replacement for the Client Secret Certificate
     Thumbprint. It is also optional."""

    @overload
    def __init__(
        self,
        *,
        open_id_issuer: Optional[str] = None,
        client_id: Optional[str] = None,
        client_secret_setting_name: Optional[str] = None,
        client_secret_certificate_thumbprint: Optional[str] = None,
        client_secret_certificate_subject_alternative_name: Optional[str] = None,
        client_secret_certificate_issuer: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AzureActiveDirectoryValidation(_Model):
    """The configuration settings of the Azure Active Directory token validation flow.

    :ivar jwt_claim_checks: The configuration settings of the checks that should be made while
     validating the JWT Claims.
    :vartype jwt_claim_checks: ~azure.mgmt.web.models.JwtClaimChecks
    :ivar allowed_audiences: The list of audiences that can make successful
     authentication/authorization requests.
    :vartype allowed_audiences: list[str]
    :ivar default_authorization_policy: The configuration settings of the default authorization
     policy.
    :vartype default_authorization_policy: ~azure.mgmt.web.models.DefaultAuthorizationPolicy
    """

    jwt_claim_checks: Optional["_models.JwtClaimChecks"] = rest_field(
        name="jwtClaimChecks", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the checks that should be made while validating the JWT Claims."""
    allowed_audiences: Optional[list[str]] = rest_field(
        name="allowedAudiences", visibility=["read", "create", "update", "delete", "query"]
    )
    """The list of audiences that can make successful authentication/authorization requests."""
    default_authorization_policy: Optional["_models.DefaultAuthorizationPolicy"] = rest_field(
        name="defaultAuthorizationPolicy", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the default authorization policy."""

    @overload
    def __init__(
        self,
        *,
        jwt_claim_checks: Optional["_models.JwtClaimChecks"] = None,
        allowed_audiences: Optional[list[str]] = None,
        default_authorization_policy: Optional["_models.DefaultAuthorizationPolicy"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AzureBlobStorageApplicationLogsConfig(_Model):
    """Application logs azure blob storage configuration.

    :ivar level: Log level. Known values are: "Off", "Verbose", "Information", "Warning", and
     "Error".
    :vartype level: str or ~azure.mgmt.web.models.LogLevel
    :ivar sas_url: SAS url to a azure blob container with read/write/list/delete permissions.
    :vartype sas_url: str
    :ivar retention_in_days: Retention in days. Remove blobs older than X days. 0 or lower means no
     retention.
    :vartype retention_in_days: int
    """

    level: Optional[Union[str, "_models.LogLevel"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Log level. Known values are: \"Off\", \"Verbose\", \"Information\", \"Warning\", and \"Error\"."""
    sas_url: Optional[str] = rest_field(name="sasUrl", visibility=["read", "create", "update", "delete", "query"])
    """SAS url to a azure blob container with read/write/list/delete permissions."""
    retention_in_days: Optional[int] = rest_field(
        name="retentionInDays", visibility=["read", "create", "update", "delete", "query"]
    )
    """Retention in days. Remove blobs older than X days. 0 or lower means no retention."""

    @overload
    def __init__(
        self,
        *,
        level: Optional[Union[str, "_models.LogLevel"]] = None,
        sas_url: Optional[str] = None,
        retention_in_days: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AzureBlobStorageHttpLogsConfig(_Model):
    """Http logs to azure blob storage configuration.

    :ivar sas_url: SAS url to a azure blob container with read/write/list/delete permissions.
    :vartype sas_url: str
    :ivar retention_in_days: Retention in days. Remove blobs older than X days. 0 or lower means no
     retention.
    :vartype retention_in_days: int
    :ivar enabled: True if configuration is enabled, false if it is disabled and null if
     configuration is not set.
    :vartype enabled: bool
    """

    sas_url: Optional[str] = rest_field(name="sasUrl", visibility=["read", "create", "update", "delete", "query"])
    """SAS url to a azure blob container with read/write/list/delete permissions."""
    retention_in_days: Optional[int] = rest_field(
        name="retentionInDays", visibility=["read", "create", "update", "delete", "query"]
    )
    """Retention in days. Remove blobs older than X days. 0 or lower means no retention."""
    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """True if configuration is enabled, false if it is disabled and null if configuration is not set."""

    @overload
    def __init__(
        self,
        *,
        sas_url: Optional[str] = None,
        retention_in_days: Optional[int] = None,
        enabled: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ErrorInfo(_Model):
    """The error info.

    :ivar code: The error code. Required.
    :vartype code: str
    """

    code: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The error code. Required."""

    @overload
    def __init__(
        self,
        *,
        code: str,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AzureResourceErrorInfo(ErrorInfo):
    """The azure resource error info.

    :ivar code: The error code. Required.
    :vartype code: str
    :ivar message: The error message. Required.
    :vartype message: str
    :ivar details: The error details.
    :vartype details: list[~azure.mgmt.web.models.AzureResourceErrorInfo]
    """

    message: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The error message. Required."""
    details: Optional[list["_models.AzureResourceErrorInfo"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The error details."""

    @overload
    def __init__(
        self,
        *,
        code: str,
        message: str,
        details: Optional[list["_models.AzureResourceErrorInfo"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AzureStaticWebApps(_Model):
    """The configuration settings of the Azure Static Web Apps provider.

    :ivar enabled: <code>false</code> if the Azure Static Web Apps provider should not be enabled
     despite the set registration; otherwise, <code>true</code>.
    :vartype enabled: bool
    :ivar registration: The configuration settings of the Azure Static Web Apps registration.
    :vartype registration: ~azure.mgmt.web.models.AzureStaticWebAppsRegistration
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>false</code> if the Azure Static Web Apps provider should not be enabled despite the set
     registration; otherwise, <code>true</code>."""
    registration: Optional["_models.AzureStaticWebAppsRegistration"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the Azure Static Web Apps registration."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        registration: Optional["_models.AzureStaticWebAppsRegistration"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AzureStaticWebAppsRegistration(_Model):
    """The configuration settings of the registration for the Azure Static Web Apps provider.

    :ivar client_id: The Client ID of the app used for login.
    :vartype client_id: str
    """

    client_id: Optional[str] = rest_field(name="clientId", visibility=["read", "create", "update", "delete", "query"])
    """The Client ID of the app used for login."""

    @overload
    def __init__(
        self,
        *,
        client_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AzureStorageInfoValue(_Model):
    """Azure Files or Blob Storage access information value for dictionary storage.

    :ivar type: Type of storage. Known values are: "AzureFiles" and "AzureBlob".
    :vartype type: str or ~azure.mgmt.web.models.AzureStorageType
    :ivar account_name: Name of the storage account.
    :vartype account_name: str
    :ivar share_name: Name of the file share (container name, for Blob storage).
    :vartype share_name: str
    :ivar access_key: Access key for the storage account.
    :vartype access_key: str
    :ivar mount_path: Path to mount the storage within the site's runtime environment.
    :vartype mount_path: str
    :ivar state: State of the storage account. Known values are: "Ok", "InvalidCredentials",
     "InvalidShare", and "NotValidated".
    :vartype state: str or ~azure.mgmt.web.models.AzureStorageState
    :ivar protocol: Mounting protocol to use for the storage account. Known values are: "Smb",
     "Http", and "Nfs".
    :vartype protocol: str or ~azure.mgmt.web.models.AzureStorageProtocol
    """

    type: Optional[Union[str, "_models.AzureStorageType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Type of storage. Known values are: \"AzureFiles\" and \"AzureBlob\"."""
    account_name: Optional[str] = rest_field(
        name="accountName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Name of the storage account."""
    share_name: Optional[str] = rest_field(name="shareName", visibility=["read", "create", "update", "delete", "query"])
    """Name of the file share (container name, for Blob storage)."""
    access_key: Optional[str] = rest_field(name="accessKey", visibility=["read", "create", "update", "delete", "query"])
    """Access key for the storage account."""
    mount_path: Optional[str] = rest_field(name="mountPath", visibility=["read", "create", "update", "delete", "query"])
    """Path to mount the storage within the site's runtime environment."""
    state: Optional[Union[str, "_models.AzureStorageState"]] = rest_field(visibility=["read"])
    """State of the storage account. Known values are: \"Ok\", \"InvalidCredentials\",
     \"InvalidShare\", and \"NotValidated\"."""
    protocol: Optional[Union[str, "_models.AzureStorageProtocol"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Mounting protocol to use for the storage account. Known values are: \"Smb\", \"Http\", and
     \"Nfs\"."""

    @overload
    def __init__(
        self,
        *,
        type: Optional[Union[str, "_models.AzureStorageType"]] = None,
        account_name: Optional[str] = None,
        share_name: Optional[str] = None,
        access_key: Optional[str] = None,
        mount_path: Optional[str] = None,
        protocol: Optional[Union[str, "_models.AzureStorageProtocol"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class AzureStoragePropertyDictionaryResource(ProxyOnlyResource):
    """AzureStorageInfo dictionary resource.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: Azure storage accounts.
    :vartype properties: dict[str, ~azure.mgmt.web.models.AzureStorageInfoValue]
    """

    properties: Optional[dict[str, "_models.AzureStorageInfoValue"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Azure storage accounts."""

    __flattened_items = [""]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional[dict[str, "_models.AzureStorageInfoValue"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class AzureTableStorageApplicationLogsConfig(_Model):
    """Application logs to Azure table storage configuration.

    :ivar level: Log level. Known values are: "Off", "Verbose", "Information", "Warning", and
     "Error".
    :vartype level: str or ~azure.mgmt.web.models.LogLevel
    :ivar sas_url: SAS URL to an Azure table with add/query/delete permissions. Required.
    :vartype sas_url: str
    """

    level: Optional[Union[str, "_models.LogLevel"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Log level. Known values are: \"Off\", \"Verbose\", \"Information\", \"Warning\", and \"Error\"."""
    sas_url: str = rest_field(name="sasUrl", visibility=["read", "create", "update", "delete", "query"])
    """SAS URL to an Azure table with add/query/delete permissions. Required."""

    @overload
    def __init__(
        self,
        *,
        sas_url: str,
        level: Optional[Union[str, "_models.LogLevel"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class BackupItem(ProxyResource):
    """Backup description.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: BackupItem resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.BackupItemProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.BackupItemProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """BackupItem resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "backup_id",
        "storage_account_url",
        "blob_name",
        "name",
        "status",
        "size_in_bytes",
        "created",
        "log",
        "databases",
        "scheduled",
        "last_restore_time_stamp",
        "finished_time_stamp",
        "correlation_id",
        "website_size_in_bytes",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.BackupItemProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class BackupItemProperties(_Model):
    """BackupItem resource specific properties.

    :ivar backup_id: Id of the backup.
    :vartype backup_id: int
    :ivar storage_account_url: SAS URL for the storage account container which contains this
     backup.
    :vartype storage_account_url: str
    :ivar blob_name: Name of the blob which contains data for this backup.
    :vartype blob_name: str
    :ivar name: Name of this backup.
    :vartype name: str
    :ivar status: Backup status. Known values are: "InProgress", "Failed", "Succeeded", "TimedOut",
     "Created", "Skipped", "PartiallySucceeded", "DeleteInProgress", "DeleteFailed", and "Deleted".
    :vartype status: str or ~azure.mgmt.web.models.BackupItemStatus
    :ivar size_in_bytes: Size of the backup in bytes.
    :vartype size_in_bytes: int
    :ivar created: Timestamp of the backup creation.
    :vartype created: ~datetime.datetime
    :ivar log: Details regarding this backup. Might contain an error message.
    :vartype log: str
    :ivar databases: List of databases included in the backup.
    :vartype databases: list[~azure.mgmt.web.models.DatabaseBackupSetting]
    :ivar scheduled: True if this backup has been created due to a schedule being triggered.
    :vartype scheduled: bool
    :ivar last_restore_time_stamp: Timestamp of a last restore operation which used this backup.
    :vartype last_restore_time_stamp: ~datetime.datetime
    :ivar finished_time_stamp: Timestamp when this backup finished.
    :vartype finished_time_stamp: ~datetime.datetime
    :ivar correlation_id: Unique correlation identifier. Please use this along with the timestamp
     while communicating with Azure support.
    :vartype correlation_id: str
    :ivar website_size_in_bytes: Size of the original web app which has been backed up.
    :vartype website_size_in_bytes: int
    """

    backup_id: Optional[int] = rest_field(name="id", visibility=["read"])
    """Id of the backup."""
    storage_account_url: Optional[str] = rest_field(name="storageAccountUrl", visibility=["read"])
    """SAS URL for the storage account container which contains this backup."""
    blob_name: Optional[str] = rest_field(name="blobName", visibility=["read"])
    """Name of the blob which contains data for this backup."""
    name: Optional[str] = rest_field(visibility=["read"])
    """Name of this backup."""
    status: Optional[Union[str, "_models.BackupItemStatus"]] = rest_field(visibility=["read"])
    """Backup status. Known values are: \"InProgress\", \"Failed\", \"Succeeded\", \"TimedOut\",
     \"Created\", \"Skipped\", \"PartiallySucceeded\", \"DeleteInProgress\", \"DeleteFailed\", and
     \"Deleted\"."""
    size_in_bytes: Optional[int] = rest_field(name="sizeInBytes", visibility=["read"])
    """Size of the backup in bytes."""
    created: Optional[datetime.datetime] = rest_field(visibility=["read"], format="rfc3339")
    """Timestamp of the backup creation."""
    log: Optional[str] = rest_field(visibility=["read"])
    """Details regarding this backup. Might contain an error message."""
    databases: Optional[list["_models.DatabaseBackupSetting"]] = rest_field(visibility=["read"])
    """List of databases included in the backup."""
    scheduled: Optional[bool] = rest_field(visibility=["read"])
    """True if this backup has been created due to a schedule being triggered."""
    last_restore_time_stamp: Optional[datetime.datetime] = rest_field(
        name="lastRestoreTimeStamp", visibility=["read"], format="rfc3339"
    )
    """Timestamp of a last restore operation which used this backup."""
    finished_time_stamp: Optional[datetime.datetime] = rest_field(
        name="finishedTimeStamp", visibility=["read"], format="rfc3339"
    )
    """Timestamp when this backup finished."""
    correlation_id: Optional[str] = rest_field(name="correlationId", visibility=["read"])
    """Unique correlation identifier. Please use this along with the timestamp while communicating
     with Azure support."""
    website_size_in_bytes: Optional[int] = rest_field(name="websiteSizeInBytes", visibility=["read"])
    """Size of the original web app which has been backed up."""


class BackupRequest(ProxyOnlyResource):
    """Description of a backup which will be performed.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: BackupRequest resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.BackupRequestProperties
    """

    properties: Optional["_models.BackupRequestProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """BackupRequest resource specific properties."""

    __flattened_items = ["backup_name", "enabled", "storage_account_url", "backup_schedule", "databases"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.BackupRequestProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class BackupRequestProperties(_Model):
    """BackupRequest resource specific properties.

    :ivar backup_name: Name of the backup.
    :vartype backup_name: str
    :ivar enabled: True if the backup schedule is enabled (must be included in that case), false if
     the backup schedule should be disabled.
    :vartype enabled: bool
    :ivar storage_account_url: SAS URL to the container. Required.
    :vartype storage_account_url: str
    :ivar backup_schedule: Schedule for the backup if it is executed periodically.
    :vartype backup_schedule: ~azure.mgmt.web.models.BackupSchedule
    :ivar databases: Databases included in the backup.
    :vartype databases: list[~azure.mgmt.web.models.DatabaseBackupSetting]
    """

    backup_name: Optional[str] = rest_field(
        name="backupName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Name of the backup."""
    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """True if the backup schedule is enabled (must be included in that case), false if the backup
     schedule should be disabled."""
    storage_account_url: str = rest_field(
        name="storageAccountUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """SAS URL to the container. Required."""
    backup_schedule: Optional["_models.BackupSchedule"] = rest_field(
        name="backupSchedule", visibility=["read", "create", "update", "delete", "query"]
    )
    """Schedule for the backup if it is executed periodically."""
    databases: Optional[list["_models.DatabaseBackupSetting"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Databases included in the backup."""

    @overload
    def __init__(
        self,
        *,
        storage_account_url: str,
        backup_name: Optional[str] = None,
        enabled: Optional[bool] = None,
        backup_schedule: Optional["_models.BackupSchedule"] = None,
        databases: Optional[list["_models.DatabaseBackupSetting"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class BackupSchedule(_Model):
    """Description of a backup schedule. Describes how often should be the backup performed and what
    should be the retention policy.

    :ivar frequency_interval: How often the backup should be executed (e.g. for weekly backup, this
     should be set to 7 and FrequencyUnit should be set to Day). Required.
    :vartype frequency_interval: int
    :ivar frequency_unit: The unit of time for how often the backup should be executed (e.g. for
     weekly backup, this should be set to Day and FrequencyInterval should be set to 7). Required.
     Known values are: "Day" and "Hour".
    :vartype frequency_unit: str or ~azure.mgmt.web.models.FrequencyUnit
    :ivar keep_at_least_one_backup: True if the retention policy should always keep at least one
     backup in the storage account, regardless how old it is; false otherwise. Required.
    :vartype keep_at_least_one_backup: bool
    :ivar retention_period_in_days: After how many days backups should be deleted. Required.
    :vartype retention_period_in_days: int
    :ivar start_time: When the schedule should start working.
    :vartype start_time: ~datetime.datetime
    :ivar last_execution_time: Last time when this schedule was triggered.
    :vartype last_execution_time: ~datetime.datetime
    """

    frequency_interval: int = rest_field(
        name="frequencyInterval", visibility=["read", "create", "update", "delete", "query"]
    )
    """How often the backup should be executed (e.g. for weekly backup, this should be set to 7 and
     FrequencyUnit should be set to Day). Required."""
    frequency_unit: Union[str, "_models.FrequencyUnit"] = rest_field(
        name="frequencyUnit", visibility=["read", "create", "update", "delete", "query"]
    )
    """The unit of time for how often the backup should be executed (e.g. for weekly backup, this
     should be set to Day and FrequencyInterval should be set to 7). Required. Known values are:
     \"Day\" and \"Hour\"."""
    keep_at_least_one_backup: bool = rest_field(
        name="keepAtLeastOneBackup", visibility=["read", "create", "update", "delete", "query"]
    )
    """True if the retention policy should always keep at least one backup in the storage account,
     regardless how old it is; false otherwise. Required."""
    retention_period_in_days: int = rest_field(
        name="retentionPeriodInDays", visibility=["read", "create", "update", "delete", "query"]
    )
    """After how many days backups should be deleted. Required."""
    start_time: Optional[datetime.datetime] = rest_field(
        name="startTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """When the schedule should start working."""
    last_execution_time: Optional[datetime.datetime] = rest_field(
        name="lastExecutionTime", visibility=["read"], format="rfc3339"
    )
    """Last time when this schedule was triggered."""

    @overload
    def __init__(
        self,
        *,
        frequency_interval: int,
        frequency_unit: Union[str, "_models.FrequencyUnit"],
        keep_at_least_one_backup: bool,
        retention_period_in_days: int,
        start_time: Optional[datetime.datetime] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class BillingMeter(ProxyOnlyResource):
    """App Service billing entity that contains information about meter which the Azure billing system
    utilizes to charge users for services.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: BillingMeter resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.BillingMeterProperties
    """

    properties: Optional["_models.BillingMeterProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """BillingMeter resource specific properties."""

    __flattened_items = [
        "meter_id",
        "billing_location",
        "short_name",
        "friendly_name",
        "resource_type",
        "os_type",
        "multiplier",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.BillingMeterProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class BillingMeterProperties(_Model):
    """BillingMeter resource specific properties.

    :ivar meter_id: Meter GUID onboarded in Commerce.
    :vartype meter_id: str
    :ivar billing_location: Azure Location of billable resource.
    :vartype billing_location: str
    :ivar short_name: Short Name from App Service Azure pricing Page.
    :vartype short_name: str
    :ivar friendly_name: Friendly name of the meter.
    :vartype friendly_name: str
    :ivar resource_type: App Service ResourceType meter used for.
    :vartype resource_type: str
    :ivar os_type: App Service OS type meter used for.
    :vartype os_type: str
    :ivar multiplier: Meter Multiplier.
    :vartype multiplier: float
    """

    meter_id: Optional[str] = rest_field(name="meterId", visibility=["read", "create", "update", "delete", "query"])
    """Meter GUID onboarded in Commerce."""
    billing_location: Optional[str] = rest_field(
        name="billingLocation", visibility=["read", "create", "update", "delete", "query"]
    )
    """Azure Location of billable resource."""
    short_name: Optional[str] = rest_field(name="shortName", visibility=["read", "create", "update", "delete", "query"])
    """Short Name from App Service Azure pricing Page."""
    friendly_name: Optional[str] = rest_field(
        name="friendlyName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Friendly name of the meter."""
    resource_type: Optional[str] = rest_field(
        name="resourceType", visibility=["read", "create", "update", "delete", "query"]
    )
    """App Service ResourceType meter used for."""
    os_type: Optional[str] = rest_field(name="osType", visibility=["read", "create", "update", "delete", "query"])
    """App Service OS type meter used for."""
    multiplier: Optional[float] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Meter Multiplier."""

    @overload
    def __init__(
        self,
        *,
        meter_id: Optional[str] = None,
        billing_location: Optional[str] = None,
        short_name: Optional[str] = None,
        friendly_name: Optional[str] = None,
        resource_type: Optional[str] = None,
        os_type: Optional[str] = None,
        multiplier: Optional[float] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class BlobStorageTokenStore(_Model):
    """The configuration settings of the storage of the tokens if blob storage is used.

    :ivar sas_url_setting_name: The name of the app setting containing the SAS URL of the blob
     storage containing the tokens.
    :vartype sas_url_setting_name: str
    """

    sas_url_setting_name: Optional[str] = rest_field(
        name="sasUrlSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The name of the app setting containing the SAS URL of the blob storage containing the tokens."""

    @overload
    def __init__(
        self,
        *,
        sas_url_setting_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Capability(_Model):
    """Describes the capabilities/features allowed for a specific SKU.

    :ivar name: Name of the SKU capability.
    :vartype name: str
    :ivar value: Value of the SKU capability.
    :vartype value: str
    :ivar reason: Reason of the SKU capability.
    :vartype reason: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the SKU capability."""
    value: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Value of the SKU capability."""
    reason: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Reason of the SKU capability."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        value: Optional[str] = None,
        reason: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Certificate(TrackedResource):
    """SSL certificate for an app.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: Certificate resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.CertificateProperties
    :ivar kind: Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind.
    :vartype kind: str
    """

    properties: Optional["_models.CertificateProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Certificate resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind."""

    __flattened_items = [
        "password",
        "friendly_name",
        "subject_name",
        "host_names",
        "pfx_blob",
        "site_name",
        "self_link",
        "issuer",
        "issue_date",
        "expiration_date",
        "thumbprint",
        "valid",
        "cer_blob",
        "public_key_hash",
        "hosting_environment_profile",
        "key_vault_id",
        "key_vault_secret_name",
        "key_vault_secret_status",
        "server_farm_id",
        "canonical_name",
        "domain_validation_method",
    ]

    @overload
    def __init__(
        self,
        *,
        location: str,
        tags: Optional[dict[str, str]] = None,
        properties: Optional["_models.CertificateProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class CertificatePatchResource(ProxyOnlyResource):
    """ARM resource for a certificate.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: CertificatePatchResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.CertificatePatchResourceProperties
    """

    properties: Optional["_models.CertificatePatchResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """CertificatePatchResource resource specific properties."""

    __flattened_items = [
        "password",
        "friendly_name",
        "subject_name",
        "host_names",
        "pfx_blob",
        "site_name",
        "self_link",
        "issuer",
        "issue_date",
        "expiration_date",
        "thumbprint",
        "valid",
        "cer_blob",
        "public_key_hash",
        "hosting_environment_profile",
        "key_vault_id",
        "key_vault_secret_name",
        "key_vault_secret_status",
        "server_farm_id",
        "canonical_name",
        "domain_validation_method",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.CertificatePatchResourceProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class CertificatePatchResourceProperties(_Model):
    """CertificatePatchResource resource specific properties.

    :ivar password: Certificate password.
    :vartype password: str
    :ivar friendly_name: Friendly name of the certificate.
    :vartype friendly_name: str
    :ivar subject_name: Subject name of the certificate.
    :vartype subject_name: str
    :ivar host_names: Host names the certificate applies to.
    :vartype host_names: list[str]
    :ivar pfx_blob: Pfx blob.
    :vartype pfx_blob: bytes
    :ivar site_name: App name.
    :vartype site_name: str
    :ivar self_link: Self link.
    :vartype self_link: str
    :ivar issuer: Certificate issuer.
    :vartype issuer: str
    :ivar issue_date: Certificate issue Date.
    :vartype issue_date: ~datetime.datetime
    :ivar expiration_date: Certificate expiration date.
    :vartype expiration_date: ~datetime.datetime
    :ivar thumbprint: Certificate thumbprint.
    :vartype thumbprint: str
    :ivar valid: Is the certificate valid?.
    :vartype valid: bool
    :ivar cer_blob: Raw bytes of .cer file.
    :vartype cer_blob: bytes
    :ivar public_key_hash: Public key hash.
    :vartype public_key_hash: str
    :ivar hosting_environment_profile: Specification for the App Service Environment to use for the
     certificate.
    :vartype hosting_environment_profile: ~azure.mgmt.web.models.HostingEnvironmentProfile
    :ivar key_vault_id: Key Vault Csm resource Id.
    :vartype key_vault_id: str
    :ivar key_vault_secret_name: Key Vault secret name.
    :vartype key_vault_secret_name: str
    :ivar key_vault_secret_status: Status of the Key Vault secret. Known values are: "Initialized",
     "WaitingOnCertificateOrder", "Succeeded", "CertificateOrderFailed",
     "OperationNotPermittedOnKeyVault", "AzureServiceUnauthorizedToAccessKeyVault",
     "KeyVaultDoesNotExist", "KeyVaultSecretDoesNotExist", "UnknownError", "ExternalPrivateKey", and
     "Unknown".
    :vartype key_vault_secret_status: str or ~azure.mgmt.web.models.KeyVaultSecretStatus
    :ivar server_farm_id: Resource ID of the associated App Service plan, formatted as:
     "/subscriptions/{subscriptionID}/resourceGroups/{groupName}/providers/Microsoft.Web/serverfarms/{appServicePlanName}".
    :vartype server_farm_id: str
    :ivar canonical_name: CNAME of the certificate to be issued via free certificate.
    :vartype canonical_name: str
    :ivar domain_validation_method: Method of domain validation for free cert.
    :vartype domain_validation_method: str
    """

    password: Optional[str] = rest_field(visibility=["read"])
    """Certificate password."""
    friendly_name: Optional[str] = rest_field(name="friendlyName", visibility=["read"])
    """Friendly name of the certificate."""
    subject_name: Optional[str] = rest_field(name="subjectName", visibility=["read"])
    """Subject name of the certificate."""
    host_names: Optional[list[str]] = rest_field(
        name="hostNames", visibility=["read", "create", "update", "delete", "query"]
    )
    """Host names the certificate applies to."""
    pfx_blob: Optional[bytes] = rest_field(
        name="pfxBlob", visibility=["read", "create", "update", "delete", "query"], format="base64"
    )
    """Pfx blob."""
    site_name: Optional[str] = rest_field(name="siteName", visibility=["read"])
    """App name."""
    self_link: Optional[str] = rest_field(name="selfLink", visibility=["read"])
    """Self link."""
    issuer: Optional[str] = rest_field(visibility=["read"])
    """Certificate issuer."""
    issue_date: Optional[datetime.datetime] = rest_field(name="issueDate", visibility=["read"], format="rfc3339")
    """Certificate issue Date."""
    expiration_date: Optional[datetime.datetime] = rest_field(
        name="expirationDate", visibility=["read"], format="rfc3339"
    )
    """Certificate expiration date."""
    thumbprint: Optional[str] = rest_field(visibility=["read"])
    """Certificate thumbprint."""
    valid: Optional[bool] = rest_field(visibility=["read"])
    """Is the certificate valid?."""
    cer_blob: Optional[bytes] = rest_field(name="cerBlob", visibility=["read"], format="base64")
    """Raw bytes of .cer file."""
    public_key_hash: Optional[str] = rest_field(name="publicKeyHash", visibility=["read"])
    """Public key hash."""
    hosting_environment_profile: Optional["_models.HostingEnvironmentProfile"] = rest_field(
        name="hostingEnvironmentProfile", visibility=["read"]
    )
    """Specification for the App Service Environment to use for the certificate."""
    key_vault_id: Optional[str] = rest_field(
        name="keyVaultId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Key Vault Csm resource Id."""
    key_vault_secret_name: Optional[str] = rest_field(
        name="keyVaultSecretName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Key Vault secret name."""
    key_vault_secret_status: Optional[Union[str, "_models.KeyVaultSecretStatus"]] = rest_field(
        name="keyVaultSecretStatus", visibility=["read"]
    )
    """Status of the Key Vault secret. Known values are: \"Initialized\",
     \"WaitingOnCertificateOrder\", \"Succeeded\", \"CertificateOrderFailed\",
     \"OperationNotPermittedOnKeyVault\", \"AzureServiceUnauthorizedToAccessKeyVault\",
     \"KeyVaultDoesNotExist\", \"KeyVaultSecretDoesNotExist\", \"UnknownError\",
     \"ExternalPrivateKey\", and \"Unknown\"."""
    server_farm_id: Optional[str] = rest_field(
        name="serverFarmId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource ID of the associated App Service plan, formatted as:
     \"/subscriptions/{subscriptionID}/resourceGroups/{groupName}/providers/Microsoft.Web/serverfarms/{appServicePlanName}\"."""
    canonical_name: Optional[str] = rest_field(
        name="canonicalName", visibility=["read", "create", "update", "delete", "query"]
    )
    """CNAME of the certificate to be issued via free certificate."""
    domain_validation_method: Optional[str] = rest_field(
        name="domainValidationMethod", visibility=["read", "create", "update", "delete", "query"]
    )
    """Method of domain validation for free cert."""

    @overload
    def __init__(
        self,
        *,
        host_names: Optional[list[str]] = None,
        pfx_blob: Optional[bytes] = None,
        key_vault_id: Optional[str] = None,
        key_vault_secret_name: Optional[str] = None,
        server_farm_id: Optional[str] = None,
        canonical_name: Optional[str] = None,
        domain_validation_method: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CertificateProperties(_Model):
    """Certificate resource specific properties.

    :ivar password: Certificate password.
    :vartype password: str
    :ivar friendly_name: Friendly name of the certificate.
    :vartype friendly_name: str
    :ivar subject_name: Subject name of the certificate.
    :vartype subject_name: str
    :ivar host_names: Host names the certificate applies to.
    :vartype host_names: list[str]
    :ivar pfx_blob: Pfx blob.
    :vartype pfx_blob: bytes
    :ivar site_name: App name.
    :vartype site_name: str
    :ivar self_link: Self link.
    :vartype self_link: str
    :ivar issuer: Certificate issuer.
    :vartype issuer: str
    :ivar issue_date: Certificate issue Date.
    :vartype issue_date: ~datetime.datetime
    :ivar expiration_date: Certificate expiration date.
    :vartype expiration_date: ~datetime.datetime
    :ivar thumbprint: Certificate thumbprint.
    :vartype thumbprint: str
    :ivar valid: Is the certificate valid?.
    :vartype valid: bool
    :ivar cer_blob: Raw bytes of .cer file.
    :vartype cer_blob: bytes
    :ivar public_key_hash: Public key hash.
    :vartype public_key_hash: str
    :ivar hosting_environment_profile: Specification for the App Service Environment to use for the
     certificate.
    :vartype hosting_environment_profile: ~azure.mgmt.web.models.HostingEnvironmentProfile
    :ivar key_vault_id: Azure Key Vault Csm resource Id.
    :vartype key_vault_id: str
    :ivar key_vault_secret_name: Azure Key Vault secret name.
    :vartype key_vault_secret_name: str
    :ivar key_vault_secret_status: Status of the Key Vault secret. Known values are: "Initialized",
     "WaitingOnCertificateOrder", "Succeeded", "CertificateOrderFailed",
     "OperationNotPermittedOnKeyVault", "AzureServiceUnauthorizedToAccessKeyVault",
     "KeyVaultDoesNotExist", "KeyVaultSecretDoesNotExist", "UnknownError", "ExternalPrivateKey", and
     "Unknown".
    :vartype key_vault_secret_status: str or ~azure.mgmt.web.models.KeyVaultSecretStatus
    :ivar server_farm_id: Resource ID of the associated App Service plan.
    :vartype server_farm_id: str
    :ivar canonical_name: CNAME of the certificate to be issued via free certificate.
    :vartype canonical_name: str
    :ivar domain_validation_method: Method of domain validation for free cert.
    :vartype domain_validation_method: str
    """

    password: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Certificate password."""
    friendly_name: Optional[str] = rest_field(name="friendlyName", visibility=["read"])
    """Friendly name of the certificate."""
    subject_name: Optional[str] = rest_field(name="subjectName", visibility=["read"])
    """Subject name of the certificate."""
    host_names: Optional[list[str]] = rest_field(
        name="hostNames", visibility=["read", "create", "update", "delete", "query"]
    )
    """Host names the certificate applies to."""
    pfx_blob: Optional[bytes] = rest_field(
        name="pfxBlob", visibility=["read", "create", "update", "delete", "query"], format="base64"
    )
    """Pfx blob."""
    site_name: Optional[str] = rest_field(name="siteName", visibility=["read"])
    """App name."""
    self_link: Optional[str] = rest_field(name="selfLink", visibility=["read"])
    """Self link."""
    issuer: Optional[str] = rest_field(visibility=["read"])
    """Certificate issuer."""
    issue_date: Optional[datetime.datetime] = rest_field(name="issueDate", visibility=["read"], format="rfc3339")
    """Certificate issue Date."""
    expiration_date: Optional[datetime.datetime] = rest_field(
        name="expirationDate", visibility=["read"], format="rfc3339"
    )
    """Certificate expiration date."""
    thumbprint: Optional[str] = rest_field(visibility=["read"])
    """Certificate thumbprint."""
    valid: Optional[bool] = rest_field(visibility=["read"])
    """Is the certificate valid?."""
    cer_blob: Optional[bytes] = rest_field(name="cerBlob", visibility=["read"], format="base64")
    """Raw bytes of .cer file."""
    public_key_hash: Optional[str] = rest_field(name="publicKeyHash", visibility=["read"])
    """Public key hash."""
    hosting_environment_profile: Optional["_models.HostingEnvironmentProfile"] = rest_field(
        name="hostingEnvironmentProfile", visibility=["read"]
    )
    """Specification for the App Service Environment to use for the certificate."""
    key_vault_id: Optional[str] = rest_field(
        name="keyVaultId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Azure Key Vault Csm resource Id."""
    key_vault_secret_name: Optional[str] = rest_field(
        name="keyVaultSecretName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Azure Key Vault secret name."""
    key_vault_secret_status: Optional[Union[str, "_models.KeyVaultSecretStatus"]] = rest_field(
        name="keyVaultSecretStatus", visibility=["read"]
    )
    """Status of the Key Vault secret. Known values are: \"Initialized\",
     \"WaitingOnCertificateOrder\", \"Succeeded\", \"CertificateOrderFailed\",
     \"OperationNotPermittedOnKeyVault\", \"AzureServiceUnauthorizedToAccessKeyVault\",
     \"KeyVaultDoesNotExist\", \"KeyVaultSecretDoesNotExist\", \"UnknownError\",
     \"ExternalPrivateKey\", and \"Unknown\"."""
    server_farm_id: Optional[str] = rest_field(
        name="serverFarmId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource ID of the associated App Service plan."""
    canonical_name: Optional[str] = rest_field(
        name="canonicalName", visibility=["read", "create", "update", "delete", "query"]
    )
    """CNAME of the certificate to be issued via free certificate."""
    domain_validation_method: Optional[str] = rest_field(
        name="domainValidationMethod", visibility=["read", "create", "update", "delete", "query"]
    )
    """Method of domain validation for free cert."""

    @overload
    def __init__(
        self,
        *,
        password: Optional[str] = None,
        host_names: Optional[list[str]] = None,
        pfx_blob: Optional[bytes] = None,
        key_vault_id: Optional[str] = None,
        key_vault_secret_name: Optional[str] = None,
        server_farm_id: Optional[str] = None,
        canonical_name: Optional[str] = None,
        domain_validation_method: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ClientRegistration(_Model):
    """The configuration settings of the app registration for providers that have client ids and
    client secrets.

    :ivar client_id: The Client ID of the app used for login.
    :vartype client_id: str
    :ivar client_secret_setting_name: The app setting name that contains the client secret.
    :vartype client_secret_setting_name: str
    """

    client_id: Optional[str] = rest_field(name="clientId", visibility=["read", "create", "update", "delete", "query"])
    """The Client ID of the app used for login."""
    client_secret_setting_name: Optional[str] = rest_field(
        name="clientSecretSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The app setting name that contains the client secret."""

    @overload
    def __init__(
        self,
        *,
        client_id: Optional[str] = None,
        client_secret_setting_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CloningInfo(_Model):
    """Information needed for cloning operation.

    :ivar correlation_id: Correlation ID of cloning operation. This ID ties multiple cloning
     operations together to use the same snapshot.
    :vartype correlation_id: str
    :ivar overwrite: <code>true</code> to overwrite destination app; otherwise, <code>false</code>.
    :vartype overwrite: bool
    :ivar clone_custom_host_names: <code>true</code> to clone custom hostnames from source app;
     otherwise, <code>false</code>.
    :vartype clone_custom_host_names: bool
    :ivar clone_source_control: <code>true</code> to clone source control from source app;
     otherwise, <code>false</code>.
    :vartype clone_source_control: bool
    :ivar source_web_app_id: ARM resource ID of the source app. App resource ID is of the form
     /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}
     for production slots and
     /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/slots/{slotName}
     for other slots. Required.
    :vartype source_web_app_id: str
    :ivar source_web_app_location: Location of source app ex: West US or North Europe.
    :vartype source_web_app_location: str
    :ivar hosting_environment: App Service Environment.
    :vartype hosting_environment: str
    :ivar app_settings_overrides: Application setting overrides for cloned app. If specified, these
     settings override the settings cloned from source app. Otherwise, application settings from
     source app are retained.
    :vartype app_settings_overrides: dict[str, str]
    :ivar configure_load_balancing: <code>true</code> to configure load balancing for source and
     destination app.
    :vartype configure_load_balancing: bool
    :ivar traffic_manager_profile_id: ARM resource ID of the Traffic Manager profile to use, if it
     exists. Traffic Manager resource ID is of the form
     /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/trafficManagerProfiles/{profileName}.
    :vartype traffic_manager_profile_id: str
    :ivar traffic_manager_profile_name: Name of Traffic Manager profile to create. This is only
     needed if Traffic Manager profile does not already exist.
    :vartype traffic_manager_profile_name: str
    """

    correlation_id: Optional[str] = rest_field(
        name="correlationId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Correlation ID of cloning operation. This ID ties multiple cloning operations together to use
     the same snapshot."""
    overwrite: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> to overwrite destination app; otherwise, <code>false</code>."""
    clone_custom_host_names: Optional[bool] = rest_field(
        name="cloneCustomHostNames", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to clone custom hostnames from source app; otherwise, <code>false</code>."""
    clone_source_control: Optional[bool] = rest_field(
        name="cloneSourceControl", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to clone source control from source app; otherwise, <code>false</code>."""
    source_web_app_id: str = rest_field(
        name="sourceWebAppId", visibility=["read", "create", "update", "delete", "query"]
    )
    """ARM resource ID of the source app. App resource ID is of the form
     /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}
     for production slots and
     /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/slots/{slotName}
     for other slots. Required."""
    source_web_app_location: Optional[str] = rest_field(
        name="sourceWebAppLocation", visibility=["read", "create", "update", "delete", "query"]
    )
    """Location of source app ex: West US or North Europe."""
    hosting_environment: Optional[str] = rest_field(
        name="hostingEnvironment", visibility=["read", "create", "update", "delete", "query"]
    )
    """App Service Environment."""
    app_settings_overrides: Optional[dict[str, str]] = rest_field(
        name="appSettingsOverrides", visibility=["read", "create", "update", "delete", "query"]
    )
    """Application setting overrides for cloned app. If specified, these settings override the
     settings cloned from source app. Otherwise, application settings from source app are retained."""
    configure_load_balancing: Optional[bool] = rest_field(
        name="configureLoadBalancing", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to configure load balancing for source and destination app."""
    traffic_manager_profile_id: Optional[str] = rest_field(
        name="trafficManagerProfileId", visibility=["read", "create", "update", "delete", "query"]
    )
    """ARM resource ID of the Traffic Manager profile to use, if it exists. Traffic Manager resource
     ID is of the form
     /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/trafficManagerProfiles/{profileName}."""
    traffic_manager_profile_name: Optional[str] = rest_field(
        name="trafficManagerProfileName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Name of Traffic Manager profile to create. This is only needed if Traffic Manager profile does
     not already exist."""

    @overload
    def __init__(
        self,
        *,
        source_web_app_id: str,
        correlation_id: Optional[str] = None,
        overwrite: Optional[bool] = None,
        clone_custom_host_names: Optional[bool] = None,
        clone_source_control: Optional[bool] = None,
        source_web_app_location: Optional[str] = None,
        hosting_environment: Optional[str] = None,
        app_settings_overrides: Optional[dict[str, str]] = None,
        configure_load_balancing: Optional[bool] = None,
        traffic_manager_profile_id: Optional[str] = None,
        traffic_manager_profile_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ConnectionStringDictionary(ProxyOnlyResource):
    """String dictionary resource.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: Connection strings.
    :vartype properties: dict[str, ~azure.mgmt.web.models.ConnStringValueTypePair]
    """

    properties: Optional[dict[str, "_models.ConnStringValueTypePair"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Connection strings."""

    __flattened_items = [""]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional[dict[str, "_models.ConnStringValueTypePair"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class ConnStringInfo(_Model):
    """Database connection string information.

    :ivar name: Name of connection string.
    :vartype name: str
    :ivar connection_string: Connection string value.
    :vartype connection_string: str
    :ivar type: Type of database. Known values are: "MySql", "SQLServer", "SQLAzure", "Custom",
     "NotificationHub", "ServiceBus", "EventHub", "ApiHub", "DocDb", "RedisCache", and "PostgreSQL".
    :vartype type: str or ~azure.mgmt.web.models.ConnectionStringType
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of connection string."""
    connection_string: Optional[str] = rest_field(
        name="connectionString", visibility=["read", "create", "update", "delete", "query"]
    )
    """Connection string value."""
    type: Optional[Union[str, "_models.ConnectionStringType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Type of database. Known values are: \"MySql\", \"SQLServer\", \"SQLAzure\", \"Custom\",
     \"NotificationHub\", \"ServiceBus\", \"EventHub\", \"ApiHub\", \"DocDb\", \"RedisCache\", and
     \"PostgreSQL\"."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        connection_string: Optional[str] = None,
        type: Optional[Union[str, "_models.ConnectionStringType"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ConnStringValueTypePair(_Model):
    """Database connection string value to type pair.

    :ivar value: Value of pair. Required.
    :vartype value: str
    :ivar type: Type of database. Required. Known values are: "MySql", "SQLServer", "SQLAzure",
     "Custom", "NotificationHub", "ServiceBus", "EventHub", "ApiHub", "DocDb", "RedisCache", and
     "PostgreSQL".
    :vartype type: str or ~azure.mgmt.web.models.ConnectionStringType
    """

    value: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Value of pair. Required."""
    type: Union[str, "_models.ConnectionStringType"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Type of database. Required. Known values are: \"MySql\", \"SQLServer\", \"SQLAzure\",
     \"Custom\", \"NotificationHub\", \"ServiceBus\", \"EventHub\", \"ApiHub\", \"DocDb\",
     \"RedisCache\", and \"PostgreSQL\"."""

    @overload
    def __init__(
        self,
        *,
        value: str,
        type: Union[str, "_models.ConnectionStringType"],
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ContainerAppsConfiguration(_Model):
    """ContainerAppsConfiguration.

    :ivar dapr_ai_instrumentation_key: Azure Monitor instrumentation key used by Dapr to export
     Service to Service communication telemetry.
    :vartype dapr_ai_instrumentation_key: str
    :ivar platform_reserved_cidr: IP range in CIDR notation that can be reserved for environment
     infrastructure IP addresses. It must not overlap with any other Subnet IP ranges.
    :vartype platform_reserved_cidr: str
    :ivar platform_reserved_dns_ip: An IP address from the IP range defined by platformReservedCidr
     that will be reserved for the internal DNS server.
    :vartype platform_reserved_dns_ip: str
    :ivar control_plane_subnet_resource_id: Resource ID of a subnet for control plane
     infrastructure components. This subnet must be in the same VNET as the subnet defined in
     appSubnetResourceId. Must not overlap with the IP range defined in platformReservedCidr, if
     defined.
    :vartype control_plane_subnet_resource_id: str
    :ivar app_subnet_resource_id: Resource ID of a subnet for control plane infrastructure
     components. This subnet must be in the same VNET as the subnet defined in appSubnetResourceId.
     Must not overlap with the IP range defined in platformReservedCidr, if defined.
    :vartype app_subnet_resource_id: str
    :ivar docker_bridge_cidr: CIDR notation IP range assigned to the Docker bridge network. It must
     not overlap with any Subnet IP ranges or the IP range defined in platformReservedCidr, if
     defined.
    :vartype docker_bridge_cidr: str
    """

    dapr_ai_instrumentation_key: Optional[str] = rest_field(
        name="daprAIInstrumentationKey", visibility=["read", "create"]
    )
    """Azure Monitor instrumentation key used by Dapr to export Service to Service communication
     telemetry."""
    platform_reserved_cidr: Optional[str] = rest_field(name="platformReservedCidr", visibility=["read", "create"])
    """IP range in CIDR notation that can be reserved for environment infrastructure IP addresses. It
     must not overlap with any other Subnet IP ranges."""
    platform_reserved_dns_ip: Optional[str] = rest_field(name="platformReservedDnsIP", visibility=["read", "create"])
    """An IP address from the IP range defined by platformReservedCidr that will be reserved for the
     internal DNS server."""
    control_plane_subnet_resource_id: Optional[str] = rest_field(
        name="controlPlaneSubnetResourceId", visibility=["read", "create"]
    )
    """Resource ID of a subnet for control plane infrastructure components. This subnet must be in the
     same VNET as the subnet defined in appSubnetResourceId. Must not overlap with the IP range
     defined in platformReservedCidr, if defined."""
    app_subnet_resource_id: Optional[str] = rest_field(name="appSubnetResourceId", visibility=["read", "create"])
    """Resource ID of a subnet for control plane infrastructure components. This subnet must be in the
     same VNET as the subnet defined in appSubnetResourceId. Must not overlap with the IP range
     defined in platformReservedCidr, if defined."""
    docker_bridge_cidr: Optional[str] = rest_field(name="dockerBridgeCidr", visibility=["read", "create"])
    """CIDR notation IP range assigned to the Docker bridge network. It must not overlap with any
     Subnet IP ranges or the IP range defined in platformReservedCidr, if defined."""

    @overload
    def __init__(
        self,
        *,
        dapr_ai_instrumentation_key: Optional[str] = None,
        platform_reserved_cidr: Optional[str] = None,
        platform_reserved_dns_ip: Optional[str] = None,
        control_plane_subnet_resource_id: Optional[str] = None,
        app_subnet_resource_id: Optional[str] = None,
        docker_bridge_cidr: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ContainerCpuStatistics(_Model):
    """ContainerCpuStatistics.

    :ivar cpu_usage:
    :vartype cpu_usage: ~azure.mgmt.web.models.ContainerCpuUsage
    :ivar system_cpu_usage:
    :vartype system_cpu_usage: int
    :ivar online_cpu_count:
    :vartype online_cpu_count: int
    :ivar throttling_data:
    :vartype throttling_data: ~azure.mgmt.web.models.ContainerThrottlingData
    """

    cpu_usage: Optional["_models.ContainerCpuUsage"] = rest_field(
        name="cpuUsage", visibility=["read", "create", "update", "delete", "query"]
    )
    system_cpu_usage: Optional[int] = rest_field(
        name="systemCpuUsage", visibility=["read", "create", "update", "delete", "query"]
    )
    online_cpu_count: Optional[int] = rest_field(
        name="onlineCpuCount", visibility=["read", "create", "update", "delete", "query"]
    )
    throttling_data: Optional["_models.ContainerThrottlingData"] = rest_field(
        name="throttlingData", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        cpu_usage: Optional["_models.ContainerCpuUsage"] = None,
        system_cpu_usage: Optional[int] = None,
        online_cpu_count: Optional[int] = None,
        throttling_data: Optional["_models.ContainerThrottlingData"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ContainerCpuUsage(_Model):
    """ContainerCpuUsage.

    :ivar total_usage:
    :vartype total_usage: int
    :ivar per_cpu_usage:
    :vartype per_cpu_usage: list[int]
    :ivar kernel_mode_usage:
    :vartype kernel_mode_usage: int
    :ivar user_mode_usage:
    :vartype user_mode_usage: int
    """

    total_usage: Optional[int] = rest_field(
        name="totalUsage", visibility=["read", "create", "update", "delete", "query"]
    )
    per_cpu_usage: Optional[list[int]] = rest_field(
        name="perCpuUsage", visibility=["read", "create", "update", "delete", "query"]
    )
    kernel_mode_usage: Optional[int] = rest_field(
        name="kernelModeUsage", visibility=["read", "create", "update", "delete", "query"]
    )
    user_mode_usage: Optional[int] = rest_field(
        name="userModeUsage", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        total_usage: Optional[int] = None,
        per_cpu_usage: Optional[list[int]] = None,
        kernel_mode_usage: Optional[int] = None,
        user_mode_usage: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ContainerInfo(_Model):
    """ContainerInfo.

    :ivar current_time_stamp:
    :vartype current_time_stamp: ~datetime.datetime
    :ivar previous_time_stamp:
    :vartype previous_time_stamp: ~datetime.datetime
    :ivar current_cpu_stats:
    :vartype current_cpu_stats: ~azure.mgmt.web.models.ContainerCpuStatistics
    :ivar previous_cpu_stats:
    :vartype previous_cpu_stats: ~azure.mgmt.web.models.ContainerCpuStatistics
    :ivar memory_stats:
    :vartype memory_stats: ~azure.mgmt.web.models.ContainerMemoryStatistics
    :ivar name:
    :vartype name: str
    :ivar id:
    :vartype id: str
    :ivar eth0:
    :vartype eth0: ~azure.mgmt.web.models.ContainerNetworkInterfaceStatistics
    """

    current_time_stamp: Optional[datetime.datetime] = rest_field(
        name="currentTimeStamp", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    previous_time_stamp: Optional[datetime.datetime] = rest_field(
        name="previousTimeStamp", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    current_cpu_stats: Optional["_models.ContainerCpuStatistics"] = rest_field(
        name="currentCpuStats", visibility=["read", "create", "update", "delete", "query"]
    )
    previous_cpu_stats: Optional["_models.ContainerCpuStatistics"] = rest_field(
        name="previousCpuStats", visibility=["read", "create", "update", "delete", "query"]
    )
    memory_stats: Optional["_models.ContainerMemoryStatistics"] = rest_field(
        name="memoryStats", visibility=["read", "create", "update", "delete", "query"]
    )
    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    eth0: Optional["_models.ContainerNetworkInterfaceStatistics"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        current_time_stamp: Optional[datetime.datetime] = None,
        previous_time_stamp: Optional[datetime.datetime] = None,
        current_cpu_stats: Optional["_models.ContainerCpuStatistics"] = None,
        previous_cpu_stats: Optional["_models.ContainerCpuStatistics"] = None,
        memory_stats: Optional["_models.ContainerMemoryStatistics"] = None,
        name: Optional[str] = None,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        eth0: Optional["_models.ContainerNetworkInterfaceStatistics"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ContainerMemoryStatistics(_Model):
    """ContainerMemoryStatistics.

    :ivar usage:
    :vartype usage: int
    :ivar max_usage:
    :vartype max_usage: int
    :ivar limit:
    :vartype limit: int
    """

    usage: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    max_usage: Optional[int] = rest_field(name="maxUsage", visibility=["read", "create", "update", "delete", "query"])
    limit: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])

    @overload
    def __init__(
        self,
        *,
        usage: Optional[int] = None,
        max_usage: Optional[int] = None,
        limit: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ContainerNetworkInterfaceStatistics(_Model):
    """ContainerNetworkInterfaceStatistics.

    :ivar rx_bytes:
    :vartype rx_bytes: int
    :ivar rx_packets:
    :vartype rx_packets: int
    :ivar rx_errors:
    :vartype rx_errors: int
    :ivar rx_dropped:
    :vartype rx_dropped: int
    :ivar tx_bytes:
    :vartype tx_bytes: int
    :ivar tx_packets:
    :vartype tx_packets: int
    :ivar tx_errors:
    :vartype tx_errors: int
    :ivar tx_dropped:
    :vartype tx_dropped: int
    """

    rx_bytes: Optional[int] = rest_field(name="rxBytes", visibility=["read", "create", "update", "delete", "query"])
    rx_packets: Optional[int] = rest_field(name="rxPackets", visibility=["read", "create", "update", "delete", "query"])
    rx_errors: Optional[int] = rest_field(name="rxErrors", visibility=["read", "create", "update", "delete", "query"])
    rx_dropped: Optional[int] = rest_field(name="rxDropped", visibility=["read", "create", "update", "delete", "query"])
    tx_bytes: Optional[int] = rest_field(name="txBytes", visibility=["read", "create", "update", "delete", "query"])
    tx_packets: Optional[int] = rest_field(name="txPackets", visibility=["read", "create", "update", "delete", "query"])
    tx_errors: Optional[int] = rest_field(name="txErrors", visibility=["read", "create", "update", "delete", "query"])
    tx_dropped: Optional[int] = rest_field(name="txDropped", visibility=["read", "create", "update", "delete", "query"])

    @overload
    def __init__(
        self,
        *,
        rx_bytes: Optional[int] = None,
        rx_packets: Optional[int] = None,
        rx_errors: Optional[int] = None,
        rx_dropped: Optional[int] = None,
        tx_bytes: Optional[int] = None,
        tx_packets: Optional[int] = None,
        tx_errors: Optional[int] = None,
        tx_dropped: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ContainerThrottlingData(_Model):
    """ContainerThrottlingData.

    :ivar periods:
    :vartype periods: int
    :ivar throttled_periods:
    :vartype throttled_periods: int
    :ivar throttled_time:
    :vartype throttled_time: int
    """

    periods: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    throttled_periods: Optional[int] = rest_field(
        name="throttledPeriods", visibility=["read", "create", "update", "delete", "query"]
    )
    throttled_time: Optional[int] = rest_field(
        name="throttledTime", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        periods: Optional[int] = None,
        throttled_periods: Optional[int] = None,
        throttled_time: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ContentHash(_Model):
    """The content hash.

    :ivar algorithm: The algorithm of the content hash.
    :vartype algorithm: str
    :ivar value: The value of the content hash.
    :vartype value: str
    """

    algorithm: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The algorithm of the content hash."""
    value: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The value of the content hash."""

    @overload
    def __init__(
        self,
        *,
        algorithm: Optional[str] = None,
        value: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ContentLink(_Model):
    """The content link.

    :ivar uri: The content link URI.
    :vartype uri: str
    :ivar content_version: The content version.
    :vartype content_version: str
    :ivar content_size: The content size.
    :vartype content_size: int
    :ivar content_hash: The content hash.
    :vartype content_hash: ~azure.mgmt.web.models.ContentHash
    :ivar metadata: The metadata.
    :vartype metadata: any
    """

    uri: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The content link URI."""
    content_version: Optional[str] = rest_field(name="contentVersion", visibility=["read"])
    """The content version."""
    content_size: Optional[int] = rest_field(name="contentSize", visibility=["read"])
    """The content size."""
    content_hash: Optional["_models.ContentHash"] = rest_field(name="contentHash", visibility=["read"])
    """The content hash."""
    metadata: Optional[Any] = rest_field(visibility=["read"])
    """The metadata."""

    @overload
    def __init__(
        self,
        *,
        uri: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ContinuousWebJob(ProxyResource):
    """Continuous Web Job Information.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: ContinuousWebJob resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.ContinuousWebJobProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.ContinuousWebJobProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """ContinuousWebJob resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "status",
        "detailed_status",
        "log_url",
        "run_command",
        "url",
        "extra_info_url",
        "web_job_type",
        "error",
        "using_sdk",
        "settings",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.ContinuousWebJobProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class ContinuousWebJobProperties(_Model):
    """ContinuousWebJob resource specific properties.

    :ivar status: Job status. Known values are: "Initializing", "Starting", "Running",
     "PendingRestart", and "Stopped".
    :vartype status: str or ~azure.mgmt.web.models.ContinuousWebJobStatus
    :ivar detailed_status: Detailed status.
    :vartype detailed_status: str
    :ivar log_url: Log URL.
    :vartype log_url: str
    :ivar run_command: Run command.
    :vartype run_command: str
    :ivar url: Job URL.
    :vartype url: str
    :ivar extra_info_url: Extra Info URL.
    :vartype extra_info_url: str
    :ivar web_job_type: Job type. Known values are: "Continuous" and "Triggered".
    :vartype web_job_type: str or ~azure.mgmt.web.models.WebJobType
    :ivar error: Error information.
    :vartype error: str
    :ivar using_sdk: Using SDK?.
    :vartype using_sdk: bool
    :ivar settings: Job settings.
    :vartype settings: dict[str, any]
    """

    status: Optional[Union[str, "_models.ContinuousWebJobStatus"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Job status. Known values are: \"Initializing\", \"Starting\", \"Running\", \"PendingRestart\",
     and \"Stopped\"."""
    detailed_status: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Detailed status."""
    log_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Log URL."""
    run_command: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Run command."""
    url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Job URL."""
    extra_info_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Extra Info URL."""
    web_job_type: Optional[Union[str, "_models.WebJobType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Job type. Known values are: \"Continuous\" and \"Triggered\"."""
    error: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Error information."""
    using_sdk: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Using SDK?."""
    settings: Optional[dict[str, Any]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Job settings."""

    @overload
    def __init__(
        self,
        *,
        status: Optional[Union[str, "_models.ContinuousWebJobStatus"]] = None,
        detailed_status: Optional[str] = None,
        log_url: Optional[str] = None,
        run_command: Optional[str] = None,
        url: Optional[str] = None,
        extra_info_url: Optional[str] = None,
        web_job_type: Optional[Union[str, "_models.WebJobType"]] = None,
        error: Optional[str] = None,
        using_sdk: Optional[bool] = None,
        settings: Optional[dict[str, Any]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CookieExpiration(_Model):
    """The configuration settings of the session cookie's expiration.

    :ivar convention: The convention used when determining the session cookie's expiration. Known
     values are: "FixedTime" and "IdentityProviderDerived".
    :vartype convention: str or ~azure.mgmt.web.models.CookieExpirationConvention
    :ivar time_to_expiration: The time after the request is made when the session cookie should
     expire.
    :vartype time_to_expiration: str
    """

    convention: Optional[Union[str, "_models.CookieExpirationConvention"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The convention used when determining the session cookie's expiration. Known values are:
     \"FixedTime\" and \"IdentityProviderDerived\"."""
    time_to_expiration: Optional[str] = rest_field(
        name="timeToExpiration", visibility=["read", "create", "update", "delete", "query"]
    )
    """The time after the request is made when the session cookie should expire."""

    @overload
    def __init__(
        self,
        *,
        convention: Optional[Union[str, "_models.CookieExpirationConvention"]] = None,
        time_to_expiration: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Correlation(_Model):
    """The correlation property.

    :ivar client_tracking_id: The client tracking id.
    :vartype client_tracking_id: str
    """

    client_tracking_id: Optional[str] = rest_field(
        name="clientTrackingId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The client tracking id."""

    @overload
    def __init__(
        self,
        *,
        client_tracking_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CorsSettings(_Model):
    """Cross-Origin Resource Sharing (CORS) settings for the app.

    :ivar allowed_origins: Gets or sets the list of origins that should be allowed to make
     cross-origin calls (for example: `http://example.com:12345 <http://example.com:12345>`_). Use
     "*" to allow all.
    :vartype allowed_origins: list[str]
    :ivar support_credentials: Gets or sets whether CORS requests with credentials are allowed. See
     `https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Requests_with_credentials
     <https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Requests_with_credentials>`_ for more
     details.
    :vartype support_credentials: bool
    """

    allowed_origins: Optional[list[str]] = rest_field(
        name="allowedOrigins", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets or sets the list of origins that should be allowed to make cross-origin calls (for
     example: `http://example.com:12345 <http://example.com:12345>`_). Use \"*\" to allow all."""
    support_credentials: Optional[bool] = rest_field(
        name="supportCredentials", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets or sets whether CORS requests with credentials are allowed. See
     `https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Requests_with_credentials
     <https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Requests_with_credentials>`_ for more
     details."""

    @overload
    def __init__(
        self,
        *,
        allowed_origins: Optional[list[str]] = None,
        support_credentials: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CsmDeploymentStatus(ProxyResource):
    """Deployment status response payload.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: CsmDeploymentStatus resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.CsmDeploymentStatusProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.CsmDeploymentStatusProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """CsmDeploymentStatus resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "deployment_id",
        "status",
        "number_of_instances_in_progress",
        "number_of_instances_successful",
        "number_of_instances_failed",
        "failed_instances_logs",
        "errors",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.CsmDeploymentStatusProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class CsmDeploymentStatusProperties(_Model):
    """CsmDeploymentStatus resource specific properties.

    :ivar deployment_id: Deployment operation id.
    :vartype deployment_id: str
    :ivar status: Deployment build status. Known values are: "TimedOut", "RuntimeFailed",
     "BuildAborted", "BuildFailed", "BuildRequestReceived", "BuildPending", "BuildInProgress",
     "BuildSuccessful", "PostBuildRestartRequired", "StartPolling", "StartPollingWithRestart",
     "RuntimeStarting", and "RuntimeSuccessful".
    :vartype status: str or ~azure.mgmt.web.models.DeploymentBuildStatus
    :ivar number_of_instances_in_progress: Number of site instances currently being provisioned.
    :vartype number_of_instances_in_progress: int
    :ivar number_of_instances_successful: Number of site instances provisioned successfully.
    :vartype number_of_instances_successful: int
    :ivar number_of_instances_failed: Number of site instances failed to provision.
    :vartype number_of_instances_failed: int
    :ivar failed_instances_logs: List of URLs pointing to logs for instances which failed to
     provision.
    :vartype failed_instances_logs: list[str]
    :ivar errors: List of errors.
    :vartype errors: list[~azure.mgmt.web.models.ErrorEntity]
    """

    deployment_id: Optional[str] = rest_field(
        name="deploymentId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Deployment operation id."""
    status: Optional[Union[str, "_models.DeploymentBuildStatus"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Deployment build status. Known values are: \"TimedOut\", \"RuntimeFailed\", \"BuildAborted\",
     \"BuildFailed\", \"BuildRequestReceived\", \"BuildPending\", \"BuildInProgress\",
     \"BuildSuccessful\", \"PostBuildRestartRequired\", \"StartPolling\",
     \"StartPollingWithRestart\", \"RuntimeStarting\", and \"RuntimeSuccessful\"."""
    number_of_instances_in_progress: Optional[int] = rest_field(
        name="numberOfInstancesInProgress", visibility=["read", "create", "update", "delete", "query"]
    )
    """Number of site instances currently being provisioned."""
    number_of_instances_successful: Optional[int] = rest_field(
        name="numberOfInstancesSuccessful", visibility=["read", "create", "update", "delete", "query"]
    )
    """Number of site instances provisioned successfully."""
    number_of_instances_failed: Optional[int] = rest_field(
        name="numberOfInstancesFailed", visibility=["read", "create", "update", "delete", "query"]
    )
    """Number of site instances failed to provision."""
    failed_instances_logs: Optional[list[str]] = rest_field(
        name="failedInstancesLogs", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of URLs pointing to logs for instances which failed to provision."""
    errors: Optional[list["_models.ErrorEntity"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """List of errors."""

    @overload
    def __init__(
        self,
        *,
        deployment_id: Optional[str] = None,
        status: Optional[Union[str, "_models.DeploymentBuildStatus"]] = None,
        number_of_instances_in_progress: Optional[int] = None,
        number_of_instances_successful: Optional[int] = None,
        number_of_instances_failed: Optional[int] = None,
        failed_instances_logs: Optional[list[str]] = None,
        errors: Optional[list["_models.ErrorEntity"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CsmMoveResourceEnvelope(_Model):
    """Object with a list of the resources that need to be moved and the resource group they should be
    moved to.

    :ivar target_resource_group:
    :vartype target_resource_group: str
    :ivar resources:
    :vartype resources: list[str]
    """

    target_resource_group: Optional[str] = rest_field(
        name="targetResourceGroup", visibility=["read", "create", "update", "delete", "query"]
    )
    resources: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])

    @overload
    def __init__(
        self,
        *,
        target_resource_group: Optional[str] = None,
        resources: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CsmOperationDescription(_Model):
    """Description of an operation available for Microsoft.Web resource provider.

    :ivar name:
    :vartype name: str
    :ivar is_data_action:
    :vartype is_data_action: bool
    :ivar display: Meta data about operation used for display in portal.
    :vartype display: ~azure.mgmt.web.models.CsmOperationDisplay
    :ivar origin:
    :vartype origin: str
    :ivar properties: Properties available for a Microsoft.Web resource provider operation.
    :vartype properties: ~azure.mgmt.web.models.CsmOperationDescriptionProperties
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    is_data_action: Optional[bool] = rest_field(
        name="isDataAction", visibility=["read", "create", "update", "delete", "query"]
    )
    display: Optional["_models.CsmOperationDisplay"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Meta data about operation used for display in portal."""
    origin: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    properties: Optional["_models.CsmOperationDescriptionProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Properties available for a Microsoft.Web resource provider operation."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        is_data_action: Optional[bool] = None,
        display: Optional["_models.CsmOperationDisplay"] = None,
        origin: Optional[str] = None,
        properties: Optional["_models.CsmOperationDescriptionProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CsmOperationDescriptionProperties(_Model):
    """Properties available for a Microsoft.Web resource provider operation.

    :ivar service_specification: Resource metrics service provided by Microsoft.Insights resource
     provider.
    :vartype service_specification: ~azure.mgmt.web.models.ServiceSpecification
    """

    service_specification: Optional["_models.ServiceSpecification"] = rest_field(
        name="serviceSpecification", visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource metrics service provided by Microsoft.Insights resource provider."""

    @overload
    def __init__(
        self,
        *,
        service_specification: Optional["_models.ServiceSpecification"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CsmOperationDisplay(_Model):
    """Meta data about operation used for display in portal.

    :ivar provider:
    :vartype provider: str
    :ivar resource:
    :vartype resource: str
    :ivar operation:
    :vartype operation: str
    :ivar description:
    :vartype description: str
    """

    provider: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    resource: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    operation: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])

    @overload
    def __init__(
        self,
        *,
        provider: Optional[str] = None,
        resource: Optional[str] = None,
        operation: Optional[str] = None,
        description: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CsmPublishingCredentialsPoliciesEntity(ProxyResource):
    """Publishing Credentials Policies parameters.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: CsmPublishingCredentialsPoliciesEntity resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.CsmPublishingCredentialsPoliciesEntityProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.CsmPublishingCredentialsPoliciesEntityProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """CsmPublishingCredentialsPoliciesEntity resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["allow"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.CsmPublishingCredentialsPoliciesEntityProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class CsmPublishingCredentialsPoliciesEntityProperties(_Model):  # pylint: disable=name-too-long
    """CsmPublishingCredentialsPoliciesEntity resource specific properties.

    :ivar allow: <code>true</code> to allow access to a publishing method; otherwise,
     <code>false</code>. Required.
    :vartype allow: bool
    """

    allow: bool = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> to allow access to a publishing method; otherwise, <code>false</code>.
     Required."""

    @overload
    def __init__(
        self,
        *,
        allow: bool,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CsmPublishingProfileOptions(_Model):
    """Publishing options for requested profile.

    :ivar format: Name of the format. Valid values are: FileZilla3 WebDeploy -- default Ftp. Known
     values are: "FileZilla3", "WebDeploy", and "Ftp".
    :vartype format: str or ~azure.mgmt.web.models.PublishingProfileFormat
    :ivar include_disaster_recovery_endpoints: Include the DisasterRecover endpoint if true.
    :vartype include_disaster_recovery_endpoints: bool
    """

    format: Optional[Union[str, "_models.PublishingProfileFormat"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Name of the format. Valid values are: FileZilla3 WebDeploy -- default Ftp. Known values are:
     \"FileZilla3\", \"WebDeploy\", and \"Ftp\"."""
    include_disaster_recovery_endpoints: Optional[bool] = rest_field(
        name="includeDisasterRecoveryEndpoints", visibility=["read", "create", "update", "delete", "query"]
    )
    """Include the DisasterRecover endpoint if true."""

    @overload
    def __init__(
        self,
        *,
        format: Optional[Union[str, "_models.PublishingProfileFormat"]] = None,
        include_disaster_recovery_endpoints: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CsmSlotEntity(_Model):
    """Deployment slot parameters.

    :ivar target_slot: Destination deployment slot during swap operation. Required.
    :vartype target_slot: str
    :ivar preserve_vnet: <code>true</code> to preserve Virtual Network to the slot during swap;
     otherwise, <code>false</code>. Required.
    :vartype preserve_vnet: bool
    """

    target_slot: str = rest_field(name="targetSlot", visibility=["read", "create", "update", "delete", "query"])
    """Destination deployment slot during swap operation. Required."""
    preserve_vnet: bool = rest_field(name="preserveVnet", visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> to preserve Virtual Network to the slot during swap; otherwise,
     <code>false</code>. Required."""

    @overload
    def __init__(
        self,
        *,
        target_slot: str,
        preserve_vnet: bool,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CsmUsageQuota(_Model):
    """Usage of the quota resource.

    :ivar unit: Units of measurement for the quota resource.
    :vartype unit: str
    :ivar next_reset_time: Next reset time for the resource counter.
    :vartype next_reset_time: ~datetime.datetime
    :ivar current_value: The current value of the resource counter.
    :vartype current_value: int
    :ivar limit: The resource limit.
    :vartype limit: int
    :ivar name: Quota name.
    :vartype name: ~azure.mgmt.web.models.LocalizableString
    """

    unit: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Units of measurement for the quota resource."""
    next_reset_time: Optional[datetime.datetime] = rest_field(
        name="nextResetTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Next reset time for the resource counter."""
    current_value: Optional[int] = rest_field(
        name="currentValue", visibility=["read", "create", "update", "delete", "query"]
    )
    """The current value of the resource counter."""
    limit: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The resource limit."""
    name: Optional["_models.LocalizableString"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Quota name."""

    @overload
    def __init__(
        self,
        *,
        unit: Optional[str] = None,
        next_reset_time: Optional[datetime.datetime] = None,
        current_value: Optional[int] = None,
        limit: Optional[int] = None,
        name: Optional["_models.LocalizableString"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CustomDnsSuffixConfiguration(ProxyResource):
    """Full view of the custom domain suffix configuration for ASEv3.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: CustomDnsSuffixConfiguration resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.CustomDnsSuffixConfigurationProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.CustomDnsSuffixConfigurationProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """CustomDnsSuffixConfiguration resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "provisioning_state",
        "provisioning_details",
        "dns_suffix",
        "certificate_url",
        "key_vault_reference_identity",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.CustomDnsSuffixConfigurationProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class CustomDnsSuffixConfigurationProperties(_Model):
    """CustomDnsSuffixConfiguration resource specific properties.

    :ivar provisioning_state: Known values are: "Succeeded", "Failed", "Degraded", and
     "InProgress".
    :vartype provisioning_state: str or ~azure.mgmt.web.models.CustomDnsSuffixProvisioningState
    :ivar provisioning_details:
    :vartype provisioning_details: str
    :ivar dns_suffix: The default custom domain suffix to use for all sites deployed on the ASE.
    :vartype dns_suffix: str
    :ivar certificate_url: The URL referencing the Azure Key Vault certificate secret that should
     be used as the default SSL/TLS certificate for sites with the custom domain suffix.
    :vartype certificate_url: str
    :ivar key_vault_reference_identity: The user-assigned identity to use for resolving the key
     vault certificate reference. If not specified, the system-assigned ASE identity will be used if
     available.
    :vartype key_vault_reference_identity: str
    """

    provisioning_state: Optional[Union[str, "_models.CustomDnsSuffixProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read"]
    )
    """Known values are: \"Succeeded\", \"Failed\", \"Degraded\", and \"InProgress\"."""
    provisioning_details: Optional[str] = rest_field(name="provisioningDetails", visibility=["read"])
    dns_suffix: Optional[str] = rest_field(name="dnsSuffix", visibility=["read", "create", "update", "delete", "query"])
    """The default custom domain suffix to use for all sites deployed on the ASE."""
    certificate_url: Optional[str] = rest_field(
        name="certificateUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """The URL referencing the Azure Key Vault certificate secret that should be used as the default
     SSL/TLS certificate for sites with the custom domain suffix."""
    key_vault_reference_identity: Optional[str] = rest_field(
        name="keyVaultReferenceIdentity", visibility=["read", "create", "update", "delete", "query"]
    )
    """The user-assigned identity to use for resolving the key vault certificate reference. If not
     specified, the system-assigned ASE identity will be used if available."""

    @overload
    def __init__(
        self,
        *,
        dns_suffix: Optional[str] = None,
        certificate_url: Optional[str] = None,
        key_vault_reference_identity: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CustomHostnameAnalysisResult(ProxyOnlyResource):
    """Custom domain analysis.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: CustomHostnameAnalysisResult resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.CustomHostnameAnalysisResultProperties
    """

    properties: Optional["_models.CustomHostnameAnalysisResultProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """CustomHostnameAnalysisResult resource specific properties."""

    __flattened_items = [
        "is_hostname_already_verified",
        "custom_domain_verification_test",
        "custom_domain_verification_failure_info",
        "has_conflict_on_scale_unit",
        "has_conflict_across_subscription",
        "conflicting_app_resource_id",
        "c_name_records",
        "txt_records",
        "a_records",
        "alternate_c_name_records",
        "alternate_txt_records",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.CustomHostnameAnalysisResultProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class CustomHostnameAnalysisResultProperties(_Model):
    """CustomHostnameAnalysisResult resource specific properties.

    :ivar is_hostname_already_verified: <code>true</code> if hostname is already verified;
     otherwise, <code>false</code>.
    :vartype is_hostname_already_verified: bool
    :ivar custom_domain_verification_test: DNS verification test result. Known values are:
     "Passed", "Failed", and "Skipped".
    :vartype custom_domain_verification_test: str or
     ~azure.mgmt.web.models.DnsVerificationTestResult
    :ivar custom_domain_verification_failure_info: Raw failure information if DNS verification
     fails.
    :vartype custom_domain_verification_failure_info: ~azure.mgmt.web.models.ErrorEntity
    :ivar has_conflict_on_scale_unit: <code>true</code> if there is a conflict on a scale unit;
     otherwise, <code>false</code>.
    :vartype has_conflict_on_scale_unit: bool
    :ivar has_conflict_across_subscription: <code>true</code> if there is a conflict across
     subscriptions; otherwise, <code>false</code>.
    :vartype has_conflict_across_subscription: bool
    :ivar conflicting_app_resource_id: Name of the conflicting app on scale unit if it's within the
     same subscription.
    :vartype conflicting_app_resource_id: str
    :ivar c_name_records: CName records controller can see for this hostname.
    :vartype c_name_records: list[str]
    :ivar txt_records: TXT records controller can see for this hostname.
    :vartype txt_records: list[str]
    :ivar a_records: A records controller can see for this hostname.
    :vartype a_records: list[str]
    :ivar alternate_c_name_records: Alternate CName records controller can see for this hostname.
    :vartype alternate_c_name_records: list[str]
    :ivar alternate_txt_records: Alternate TXT records controller can see for this hostname.
    :vartype alternate_txt_records: list[str]
    """

    is_hostname_already_verified: Optional[bool] = rest_field(name="isHostnameAlreadyVerified", visibility=["read"])
    """<code>true</code> if hostname is already verified; otherwise, <code>false</code>."""
    custom_domain_verification_test: Optional[Union[str, "_models.DnsVerificationTestResult"]] = rest_field(
        name="customDomainVerificationTest", visibility=["read"]
    )
    """DNS verification test result. Known values are: \"Passed\", \"Failed\", and \"Skipped\"."""
    custom_domain_verification_failure_info: Optional["_models.ErrorEntity"] = rest_field(
        name="customDomainVerificationFailureInfo", visibility=["read"]
    )
    """Raw failure information if DNS verification fails."""
    has_conflict_on_scale_unit: Optional[bool] = rest_field(name="hasConflictOnScaleUnit", visibility=["read"])
    """<code>true</code> if there is a conflict on a scale unit; otherwise, <code>false</code>."""
    has_conflict_across_subscription: Optional[bool] = rest_field(
        name="hasConflictAcrossSubscription", visibility=["read"]
    )
    """<code>true</code> if there is a conflict across subscriptions; otherwise, <code>false</code>."""
    conflicting_app_resource_id: Optional[str] = rest_field(name="conflictingAppResourceId", visibility=["read"])
    """Name of the conflicting app on scale unit if it's within the same subscription."""
    c_name_records: Optional[list[str]] = rest_field(
        name="cNameRecords", visibility=["read", "create", "update", "delete", "query"]
    )
    """CName records controller can see for this hostname."""
    txt_records: Optional[list[str]] = rest_field(
        name="txtRecords", visibility=["read", "create", "update", "delete", "query"]
    )
    """TXT records controller can see for this hostname."""
    a_records: Optional[list[str]] = rest_field(
        name="aRecords", visibility=["read", "create", "update", "delete", "query"]
    )
    """A records controller can see for this hostname."""
    alternate_c_name_records: Optional[list[str]] = rest_field(
        name="alternateCNameRecords", visibility=["read", "create", "update", "delete", "query"]
    )
    """Alternate CName records controller can see for this hostname."""
    alternate_txt_records: Optional[list[str]] = rest_field(
        name="alternateTxtRecords", visibility=["read", "create", "update", "delete", "query"]
    )
    """Alternate TXT records controller can see for this hostname."""

    @overload
    def __init__(
        self,
        *,
        c_name_records: Optional[list[str]] = None,
        txt_records: Optional[list[str]] = None,
        a_records: Optional[list[str]] = None,
        alternate_c_name_records: Optional[list[str]] = None,
        alternate_txt_records: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CustomHostnameSites(ProxyOnlyResource):
    """A hostname and its assigned sites.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: CustomHostnameSites resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.CustomHostnameSitesProperties
    """

    properties: Optional["_models.CustomHostnameSitesProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """CustomHostnameSites resource specific properties."""

    __flattened_items = ["custom_hostname", "region", "site_resource_ids"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.CustomHostnameSitesProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class CustomHostnameSitesProperties(_Model):
    """CustomHostnameSites resource specific properties.

    :ivar custom_hostname:
    :vartype custom_hostname: str
    :ivar region:
    :vartype region: str
    :ivar site_resource_ids:
    :vartype site_resource_ids: list[~azure.mgmt.web.models.Identifier]
    """

    custom_hostname: Optional[str] = rest_field(
        name="customHostname", visibility=["read", "create", "update", "delete", "query"]
    )
    region: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    site_resource_ids: Optional[list["_models.Identifier"]] = rest_field(
        name="siteResourceIds", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        custom_hostname: Optional[str] = None,
        region: Optional[str] = None,
        site_resource_ids: Optional[list["_models.Identifier"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class CustomOpenIdConnectProvider(_Model):
    """The configuration settings of the custom Open ID Connect provider.

    :ivar enabled: <code>false</code> if the custom Open ID provider provider should not be
     enabled; otherwise, <code>true</code>.
    :vartype enabled: bool
    :ivar registration: The configuration settings of the app registration for the custom Open ID
     Connect provider.
    :vartype registration: ~azure.mgmt.web.models.OpenIdConnectRegistration
    :ivar login: The configuration settings of the login flow of the custom Open ID Connect
     provider.
    :vartype login: ~azure.mgmt.web.models.OpenIdConnectLogin
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>false</code> if the custom Open ID provider provider should not be enabled; otherwise,
     <code>true</code>."""
    registration: Optional["_models.OpenIdConnectRegistration"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the app registration for the custom Open ID Connect provider."""
    login: Optional["_models.OpenIdConnectLogin"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the login flow of the custom Open ID Connect provider."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        registration: Optional["_models.OpenIdConnectRegistration"] = None,
        login: Optional["_models.OpenIdConnectLogin"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DaprConfig(_Model):
    """App Dapr configuration.

    :ivar enabled: Boolean indicating if the Dapr side car is enabled.
    :vartype enabled: bool
    :ivar app_id: Dapr application identifier.
    :vartype app_id: str
    :ivar app_port: Tells Dapr which port your application is listening on.
    :vartype app_port: int
    :ivar http_read_buffer_size: Dapr max size of http header read buffer in KB to handle when
     sending multi-KB headers. Default is 65KB.
    :vartype http_read_buffer_size: int
    :ivar http_max_request_size: Increasing max size of request body http servers parameter in MB
     to handle uploading of big files. Default is 4 MB.
    :vartype http_max_request_size: int
    :ivar log_level: Sets the log level for the Dapr sidecar. Allowed values are debug, info, warn,
     error. Default is info. Known values are: "info", "debug", "warn", and "error".
    :vartype log_level: str or ~azure.mgmt.web.models.DaprLogLevel
    :ivar enable_api_logging: Enables API logging for the Dapr sidecar.
    :vartype enable_api_logging: bool
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Boolean indicating if the Dapr side car is enabled."""
    app_id: Optional[str] = rest_field(name="appId", visibility=["read", "create", "update", "delete", "query"])
    """Dapr application identifier."""
    app_port: Optional[int] = rest_field(name="appPort", visibility=["read", "create", "update", "delete", "query"])
    """Tells Dapr which port your application is listening on."""
    http_read_buffer_size: Optional[int] = rest_field(
        name="httpReadBufferSize", visibility=["read", "create", "update", "delete", "query"]
    )
    """Dapr max size of http header read buffer in KB to handle when sending multi-KB headers. Default
     is 65KB."""
    http_max_request_size: Optional[int] = rest_field(
        name="httpMaxRequestSize", visibility=["read", "create", "update", "delete", "query"]
    )
    """Increasing max size of request body http servers parameter in MB to handle uploading of big
     files. Default is 4 MB."""
    log_level: Optional[Union[str, "_models.DaprLogLevel"]] = rest_field(
        name="logLevel", visibility=["read", "create", "update", "delete", "query"]
    )
    """Sets the log level for the Dapr sidecar. Allowed values are debug, info, warn, error. Default
     is info. Known values are: \"info\", \"debug\", \"warn\", and \"error\"."""
    enable_api_logging: Optional[bool] = rest_field(
        name="enableApiLogging", visibility=["read", "create", "update", "delete", "query"]
    )
    """Enables API logging for the Dapr sidecar."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        app_id: Optional[str] = None,
        app_port: Optional[int] = None,
        http_read_buffer_size: Optional[int] = None,
        http_max_request_size: Optional[int] = None,
        log_level: Optional[Union[str, "_models.DaprLogLevel"]] = None,
        enable_api_logging: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DatabaseBackupSetting(_Model):
    """Database backup settings.

    :ivar database_type: Database type (e.g. SqlAzure / MySql). Required. Known values are:
     "SqlAzure", "MySql", "LocalMySql", and "PostgreSql".
    :vartype database_type: str or ~azure.mgmt.web.models.DatabaseType
    :ivar name:
    :vartype name: str
    :ivar connection_string_name: Contains a connection string name that is linked to the
     SiteConfig.ConnectionStrings. This is used during restore with overwrite connection strings
     options.
    :vartype connection_string_name: str
    :ivar connection_string: Contains a connection string to a database which is being backed up or
     restored. If the restore should happen to a new database, the database name inside is the new
     one.
    :vartype connection_string: str
    """

    database_type: Union[str, "_models.DatabaseType"] = rest_field(
        name="databaseType", visibility=["read", "create", "update", "delete", "query"]
    )
    """Database type (e.g. SqlAzure / MySql). Required. Known values are: \"SqlAzure\", \"MySql\",
     \"LocalMySql\", and \"PostgreSql\"."""
    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    connection_string_name: Optional[str] = rest_field(
        name="connectionStringName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Contains a connection string name that is linked to the SiteConfig.ConnectionStrings. This is
     used during restore with overwrite connection strings options."""
    connection_string: Optional[str] = rest_field(
        name="connectionString", visibility=["read", "create", "update", "delete", "query"]
    )
    """Contains a connection string to a database which is being backed up or restored. If the restore
     should happen to a new database, the database name inside is the new one."""

    @overload
    def __init__(
        self,
        *,
        database_type: Union[str, "_models.DatabaseType"],
        name: Optional[str] = None,
        connection_string_name: Optional[str] = None,
        connection_string: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DatabaseConnection(ProxyResource):
    """Static Site Database Connection resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: DatabaseConnection resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.DatabaseConnectionProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.DatabaseConnectionProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """DatabaseConnection resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["resource_id", "connection_identity", "connection_string", "region", "configuration_files"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.DatabaseConnectionProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class DatabaseConnectionOverview(_Model):
    """Static Site Database Connection overview.

    :ivar resource_id: The resource id of the database.
    :vartype resource_id: str
    :ivar connection_identity: If present, the identity is used in conjunction with connection
     string to connect to the database. Use of the system-assigned managed identity is indicated
     with the string 'SystemAssigned', while use of a user-assigned managed identity is indicated
     with the resource id of the managed identity resource.
    :vartype connection_identity: str
    :ivar region: The region of the database resource.
    :vartype region: str
    :ivar configuration_files: A list of configuration files associated with this database
     connection.
    :vartype configuration_files:
     list[~azure.mgmt.web.models.StaticSiteDatabaseConnectionConfigurationFileOverview]
    :ivar name: If present, the name of this database connection resource.
    :vartype name: str
    """

    resource_id: Optional[str] = rest_field(name="resourceId", visibility=["read"])
    """The resource id of the database."""
    connection_identity: Optional[str] = rest_field(name="connectionIdentity", visibility=["read"])
    """If present, the identity is used in conjunction with connection string to connect to the
     database. Use of the system-assigned managed identity is indicated with the string
     'SystemAssigned', while use of a user-assigned managed identity is indicated with the resource
     id of the managed identity resource."""
    region: Optional[str] = rest_field(visibility=["read"])
    """The region of the database resource."""
    configuration_files: Optional[list["_models.StaticSiteDatabaseConnectionConfigurationFileOverview"]] = rest_field(
        name="configurationFiles", visibility=["read"]
    )
    """A list of configuration files associated with this database connection."""
    name: Optional[str] = rest_field(visibility=["read"])
    """If present, the name of this database connection resource."""


class DatabaseConnectionPatchRequest(_Model):
    """Static Site Database Connection Request Properties resource when patching.

    :ivar properties: DatabaseConnectionPatchRequest resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.DatabaseConnectionPatchRequestProperties
    """

    properties: Optional["_models.DatabaseConnectionPatchRequestProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """DatabaseConnectionPatchRequest resource specific properties."""

    __flattened_items = ["resource_id", "connection_identity", "connection_string", "region"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.DatabaseConnectionPatchRequestProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class DatabaseConnectionPatchRequestProperties(_Model):
    """DatabaseConnectionPatchRequest resource specific properties.

    :ivar resource_id: The resource id of the database.
    :vartype resource_id: str
    :ivar connection_identity: If present, the identity is used in conjunction with connection
     string to connect to the database. Use of the system-assigned managed identity is indicated
     with the string 'SystemAssigned', while use of a user-assigned managed identity is indicated
     with the resource id of the managed identity resource.
    :vartype connection_identity: str
    :ivar connection_string: The connection string to use to connect to the database.
    :vartype connection_string: str
    :ivar region: The region of the database resource.
    :vartype region: str
    """

    resource_id: Optional[str] = rest_field(
        name="resourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The resource id of the database."""
    connection_identity: Optional[str] = rest_field(
        name="connectionIdentity", visibility=["read", "create", "update", "delete", "query"]
    )
    """If present, the identity is used in conjunction with connection string to connect to the
     database. Use of the system-assigned managed identity is indicated with the string
     'SystemAssigned', while use of a user-assigned managed identity is indicated with the resource
     id of the managed identity resource."""
    connection_string: Optional[str] = rest_field(
        name="connectionString", visibility=["read", "create", "update", "delete", "query"]
    )
    """The connection string to use to connect to the database."""
    region: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The region of the database resource."""

    @overload
    def __init__(
        self,
        *,
        resource_id: Optional[str] = None,
        connection_identity: Optional[str] = None,
        connection_string: Optional[str] = None,
        region: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DatabaseConnectionProperties(_Model):
    """DatabaseConnection resource specific properties.

    :ivar resource_id: The resource id of the database. Required.
    :vartype resource_id: str
    :ivar connection_identity: If present, the identity is used in conjunction with connection
     string to connect to the database. Use of the system-assigned managed identity is indicated
     with the string 'SystemAssigned', while use of a user-assigned managed identity is indicated
     with the resource id of the managed identity resource.
    :vartype connection_identity: str
    :ivar connection_string: The connection string to use to connect to the database.
    :vartype connection_string: str
    :ivar region: The region of the database resource. Required.
    :vartype region: str
    :ivar configuration_files: A list of configuration files associated with this database
     connection.
    :vartype configuration_files:
     list[~azure.mgmt.web.models.StaticSiteDatabaseConnectionConfigurationFileOverview]
    """

    resource_id: str = rest_field(name="resourceId", visibility=["read", "create", "update", "delete", "query"])
    """The resource id of the database. Required."""
    connection_identity: Optional[str] = rest_field(
        name="connectionIdentity", visibility=["read", "create", "update", "delete", "query"]
    )
    """If present, the identity is used in conjunction with connection string to connect to the
     database. Use of the system-assigned managed identity is indicated with the string
     'SystemAssigned', while use of a user-assigned managed identity is indicated with the resource
     id of the managed identity resource."""
    connection_string: Optional[str] = rest_field(
        name="connectionString", visibility=["read", "create", "update", "delete", "query"]
    )
    """The connection string to use to connect to the database."""
    region: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The region of the database resource. Required."""
    configuration_files: Optional[list["_models.StaticSiteDatabaseConnectionConfigurationFileOverview"]] = rest_field(
        name="configurationFiles", visibility=["read"]
    )
    """A list of configuration files associated with this database connection."""

    @overload
    def __init__(
        self,
        *,
        resource_id: str,
        region: str,
        connection_identity: Optional[str] = None,
        connection_string: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DataProviderMetadata(_Model):
    """Additional configuration for a data providers.

    :ivar provider_name:
    :vartype provider_name: str
    :ivar property_bag: Settings for the data provider.
    :vartype property_bag: list[~azure.mgmt.web.models.KeyValuePairStringObject]
    """

    provider_name: Optional[str] = rest_field(
        name="providerName", visibility=["read", "create", "update", "delete", "query"]
    )
    property_bag: Optional[list["_models.KeyValuePairStringObject"]] = rest_field(
        name="propertyBag", visibility=["read"]
    )
    """Settings for the data provider."""

    @overload
    def __init__(
        self,
        *,
        provider_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DataSource(_Model):
    """Class representing data source used by the detectors.

    :ivar instructions: Instructions if any for the data source.
    :vartype instructions: list[str]
    :ivar data_source_uri: Datasource Uri Links.
    :vartype data_source_uri: list[~azure.mgmt.web.models.NameValuePair]
    """

    instructions: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Instructions if any for the data source."""
    data_source_uri: Optional[list["_models.NameValuePair"]] = rest_field(
        name="dataSourceUri", visibility=["read", "create", "update", "delete", "query"]
    )
    """Datasource Uri Links."""

    @overload
    def __init__(
        self,
        *,
        instructions: Optional[list[str]] = None,
        data_source_uri: Optional[list["_models.NameValuePair"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DataTableResponseColumn(_Model):
    """Column definition.

    :ivar column_name: Name of the column.
    :vartype column_name: str
    :ivar data_type: Data type which looks like 'String' or 'Int32'.
    :vartype data_type: str
    :ivar column_type: Column Type.
    :vartype column_type: str
    """

    column_name: Optional[str] = rest_field(
        name="columnName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Name of the column."""
    data_type: Optional[str] = rest_field(name="dataType", visibility=["read", "create", "update", "delete", "query"])
    """Data type which looks like 'String' or 'Int32'."""
    column_type: Optional[str] = rest_field(
        name="columnType", visibility=["read", "create", "update", "delete", "query"]
    )
    """Column Type."""

    @overload
    def __init__(
        self,
        *,
        column_name: Optional[str] = None,
        data_type: Optional[str] = None,
        column_type: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DataTableResponseObject(_Model):
    """Data Table which defines columns and raw row values.

    :ivar table_name: Name of the table.
    :vartype table_name: str
    :ivar columns: List of columns with data types.
    :vartype columns: list[~azure.mgmt.web.models.DataTableResponseColumn]
    :ivar rows: Raw row values.
    :vartype rows: list[list[str]]
    """

    table_name: Optional[str] = rest_field(name="tableName", visibility=["read", "create", "update", "delete", "query"])
    """Name of the table."""
    columns: Optional[list["_models.DataTableResponseColumn"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """List of columns with data types."""
    rows: Optional[list[list[str]]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Raw row values."""

    @overload
    def __init__(
        self,
        *,
        table_name: Optional[str] = None,
        columns: Optional[list["_models.DataTableResponseColumn"]] = None,
        rows: Optional[list[list[str]]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DefaultAuthorizationPolicy(_Model):
    """The configuration settings of the Azure Active Directory default authorization policy.

    :ivar allowed_principals: The configuration settings of the Azure Active Directory allowed
     principals.
    :vartype allowed_principals: ~azure.mgmt.web.models.AllowedPrincipals
    :ivar allowed_applications: The configuration settings of the Azure Active Directory allowed
     applications.
    :vartype allowed_applications: list[str]
    """

    allowed_principals: Optional["_models.AllowedPrincipals"] = rest_field(
        name="allowedPrincipals", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the Azure Active Directory allowed principals."""
    allowed_applications: Optional[list[str]] = rest_field(
        name="allowedApplications", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the Azure Active Directory allowed applications."""

    @overload
    def __init__(
        self,
        *,
        allowed_principals: Optional["_models.AllowedPrincipals"] = None,
        allowed_applications: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DefaultErrorResponse(_Model):
    """App Service error response.

    :ivar error: Error model.
    :vartype error: ~azure.mgmt.web.models.DefaultErrorResponseError
    """

    error: Optional["_models.DefaultErrorResponseError"] = rest_field(visibility=["read"])
    """Error model."""


class DefaultErrorResponseError(_Model):
    """Error model.

    :ivar code: Standardized string to programmatically identify the error.
    :vartype code: str
    :ivar message: Detailed error description and debugging information.
    :vartype message: str
    :ivar target: Detailed error description and debugging information.
    :vartype target: str
    :ivar details:
    :vartype details: list[~azure.mgmt.web.models.DefaultErrorResponseErrorDetailsItem]
    :ivar innererror: More information to debug error.
    :vartype innererror: str
    """

    code: Optional[str] = rest_field(visibility=["read"])
    """Standardized string to programmatically identify the error."""
    message: Optional[str] = rest_field(visibility=["read"])
    """Detailed error description and debugging information."""
    target: Optional[str] = rest_field(visibility=["read"])
    """Detailed error description and debugging information."""
    details: Optional[list["_models.DefaultErrorResponseErrorDetailsItem"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    innererror: Optional[str] = rest_field(visibility=["read"])
    """More information to debug error."""

    @overload
    def __init__(
        self,
        *,
        details: Optional[list["_models.DefaultErrorResponseErrorDetailsItem"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DefaultErrorResponseErrorDetailsItem(_Model):
    """Detailed errors.

    :ivar code: Standardized string to programmatically identify the error.
    :vartype code: str
    :ivar message: Detailed error description and debugging information.
    :vartype message: str
    :ivar target: Detailed error description and debugging information.
    :vartype target: str
    """

    code: Optional[str] = rest_field(visibility=["read"])
    """Standardized string to programmatically identify the error."""
    message: Optional[str] = rest_field(visibility=["read"])
    """Detailed error description and debugging information."""
    target: Optional[str] = rest_field(visibility=["read"])
    """Detailed error description and debugging information."""


class DefaultIdentity(_Model):
    """DefaultIdentity.

    :ivar identity_type: Known values are: "SystemAssigned", "UserAssigned", "SystemAssigned,
     UserAssigned", and "None".
    :vartype identity_type: str or ~azure.mgmt.web.models.ManagedServiceIdentityType
    :ivar user_assigned_identity_resource_id:
    :vartype user_assigned_identity_resource_id: str
    """

    identity_type: Optional[Union[str, "_models.ManagedServiceIdentityType"]] = rest_field(
        name="identityType", visibility=["read", "create", "update", "delete", "query"]
    )
    """Known values are: \"SystemAssigned\", \"UserAssigned\", \"SystemAssigned, UserAssigned\", and
     \"None\"."""
    user_assigned_identity_resource_id: Optional[str] = rest_field(
        name="userAssignedIdentityResourceId", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        identity_type: Optional[Union[str, "_models.ManagedServiceIdentityType"]] = None,
        user_assigned_identity_resource_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DeletedAppRestoreRequest(ProxyOnlyResource):
    """Details about restoring a deleted app.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: DeletedAppRestoreRequest resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.DeletedAppRestoreRequestProperties
    """

    properties: Optional["_models.DeletedAppRestoreRequestProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """DeletedAppRestoreRequest resource specific properties."""

    __flattened_items = ["deleted_site_id", "recover_configuration", "snapshot_time", "use_dr_secondary"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.DeletedAppRestoreRequestProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class DeletedAppRestoreRequestProperties(_Model):
    """DeletedAppRestoreRequest resource specific properties.

    :ivar deleted_site_id: ARM resource ID of the deleted app. Example:
     /subscriptions/{subId}/providers/Microsoft.Web/deletedSites/{deletedSiteId}.
    :vartype deleted_site_id: str
    :ivar recover_configuration: If true, deleted site configuration, in addition to content, will
     be restored.
    :vartype recover_configuration: bool
    :ivar snapshot_time: Point in time to restore the deleted app from, formatted as a DateTime
     string. If unspecified, default value is the time that the app was deleted.
    :vartype snapshot_time: str
    :ivar use_dr_secondary: If true, the snapshot is retrieved from DRSecondary endpoint.
    :vartype use_dr_secondary: bool
    """

    deleted_site_id: Optional[str] = rest_field(
        name="deletedSiteId", visibility=["read", "create", "update", "delete", "query"]
    )
    """ARM resource ID of the deleted app. Example:
     /subscriptions/{subId}/providers/Microsoft.Web/deletedSites/{deletedSiteId}."""
    recover_configuration: Optional[bool] = rest_field(
        name="recoverConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """If true, deleted site configuration, in addition to content, will be restored."""
    snapshot_time: Optional[str] = rest_field(
        name="snapshotTime", visibility=["read", "create", "update", "delete", "query"]
    )
    """Point in time to restore the deleted app from, formatted as a DateTime string. If unspecified,
     default value is the time that the app was deleted."""
    use_dr_secondary: Optional[bool] = rest_field(
        name="useDRSecondary", visibility=["read", "create", "update", "delete", "query"]
    )
    """If true, the snapshot is retrieved from DRSecondary endpoint."""

    @overload
    def __init__(
        self,
        *,
        deleted_site_id: Optional[str] = None,
        recover_configuration: Optional[bool] = None,
        snapshot_time: Optional[str] = None,
        use_dr_secondary: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DeletedSite(ProxyResource):
    """A deleted app.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: DeletedSite resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.DeletedSiteProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.DeletedSiteProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """DeletedSite resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "deleted_site_id",
        "deleted_timestamp",
        "subscription",
        "resource_group",
        "deleted_site_name",
        "slot",
        "kind",
        "geo_region_name",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.DeletedSiteProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class DeletedSiteProperties(_Model):
    """DeletedSite resource specific properties.

    :ivar deleted_site_id: Numeric id for the deleted site.
    :vartype deleted_site_id: int
    :ivar deleted_timestamp: Time in UTC when the app was deleted.
    :vartype deleted_timestamp: str
    :ivar subscription: Subscription containing the deleted site.
    :vartype subscription: str
    :ivar resource_group: ResourceGroup that contained the deleted site.
    :vartype resource_group: str
    :ivar deleted_site_name: Name of the deleted site.
    :vartype deleted_site_name: str
    :ivar slot: Slot of the deleted site.
    :vartype slot: str
    :ivar kind: Kind of site that was deleted.
    :vartype kind: str
    :ivar geo_region_name: Geo Region of the deleted site.
    :vartype geo_region_name: str
    """

    deleted_site_id: Optional[int] = rest_field(name="deletedSiteId", visibility=["read"])
    """Numeric id for the deleted site."""
    deleted_timestamp: Optional[str] = rest_field(name="deletedTimestamp", visibility=["read"])
    """Time in UTC when the app was deleted."""
    subscription: Optional[str] = rest_field(visibility=["read"])
    """Subscription containing the deleted site."""
    resource_group: Optional[str] = rest_field(name="resourceGroup", visibility=["read"])
    """ResourceGroup that contained the deleted site."""
    deleted_site_name: Optional[str] = rest_field(name="deletedSiteName", visibility=["read"])
    """Name of the deleted site."""
    slot: Optional[str] = rest_field(visibility=["read"])
    """Slot of the deleted site."""
    kind: Optional[str] = rest_field(visibility=["read"])
    """Kind of site that was deleted."""
    geo_region_name: Optional[str] = rest_field(name="geoRegionName", visibility=["read"])
    """Geo Region of the deleted site."""


class Deployment(ProxyResource):
    """User credentials used for publishing activity.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: Deployment resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.DeploymentProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.DeploymentProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Deployment resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "status",
        "message",
        "author",
        "deployer",
        "author_email",
        "start_time",
        "end_time",
        "active",
        "details",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.DeploymentProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class DeploymentLocations(_Model):
    """List of available locations (regions or App Service Environments) for deployment of App Service
    resources.

    :ivar locations: Available regions.
    :vartype locations: list[~azure.mgmt.web.models.GeoRegion]
    :ivar hosting_environments: Available App Service Environments with full descriptions of the
     environments.
    :vartype hosting_environments: list[~azure.mgmt.web.models.AppServiceEnvironment]
    :ivar hosting_environment_deployment_infos: Available App Service Environments with basic
     information.
    :vartype hosting_environment_deployment_infos:
     list[~azure.mgmt.web.models.HostingEnvironmentDeploymentInfo]
    """

    locations: Optional[list["_models.GeoRegion"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Available regions."""
    hosting_environments: Optional[list["_models.AppServiceEnvironment"]] = rest_field(
        name="hostingEnvironments", visibility=["read", "create", "update", "delete", "query"]
    )
    """Available App Service Environments with full descriptions of the environments."""
    hosting_environment_deployment_infos: Optional[list["_models.HostingEnvironmentDeploymentInfo"]] = rest_field(
        name="hostingEnvironmentDeploymentInfos", visibility=["read", "create", "update", "delete", "query"]
    )
    """Available App Service Environments with basic information."""

    @overload
    def __init__(
        self,
        *,
        locations: Optional[list["_models.GeoRegion"]] = None,
        hosting_environments: Optional[list["_models.AppServiceEnvironment"]] = None,
        hosting_environment_deployment_infos: Optional[list["_models.HostingEnvironmentDeploymentInfo"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DeploymentProperties(_Model):
    """Deployment resource specific properties.

    :ivar status: Deployment status.
    :vartype status: int
    :ivar message: Details about deployment status.
    :vartype message: str
    :ivar author: Who authored the deployment.
    :vartype author: str
    :ivar deployer: Who performed the deployment.
    :vartype deployer: str
    :ivar author_email: Author email.
    :vartype author_email: str
    :ivar start_time: Start time.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: End time.
    :vartype end_time: ~datetime.datetime
    :ivar active: True if deployment is currently active, false if completed and null if not
     started.
    :vartype active: bool
    :ivar details: Details on deployment.
    :vartype details: str
    """

    status: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Deployment status."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Details about deployment status."""
    author: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Who authored the deployment."""
    deployer: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Who performed the deployment."""
    author_email: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Author email."""
    start_time: Optional[datetime.datetime] = rest_field(
        visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Start time."""
    end_time: Optional[datetime.datetime] = rest_field(
        visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """End time."""
    active: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """True if deployment is currently active, false if completed and null if not started."""
    details: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Details on deployment."""

    @overload
    def __init__(
        self,
        *,
        status: Optional[int] = None,
        message: Optional[str] = None,
        author: Optional[str] = None,
        deployer: Optional[str] = None,
        author_email: Optional[str] = None,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        active: Optional[bool] = None,
        details: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DetectorAbnormalTimePeriod(_Model):
    """Class representing Abnormal Time Period detected.

    :ivar start_time: Start time of the correlated event.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: End time of the correlated event.
    :vartype end_time: ~datetime.datetime
    :ivar message: Message describing the event.
    :vartype message: str
    :ivar source: Represents the name of the Detector.
    :vartype source: str
    :ivar priority: Represents the rank of the Detector.
    :vartype priority: float
    :ivar meta_data: Downtime metadata.
    :vartype meta_data: list[list[~azure.mgmt.web.models.NameValuePair]]
    :ivar type: Represents the type of the Detector. Known values are: "ServiceIncident",
     "AppDeployment", "AppCrash", "RuntimeIssueDetected", "AseDeployment", "UserIssue",
     "PlatformIssue", and "Other".
    :vartype type: str or ~azure.mgmt.web.models.IssueType
    :ivar solutions: List of proposed solutions.
    :vartype solutions: list[~azure.mgmt.web.models.Solution]
    """

    start_time: Optional[datetime.datetime] = rest_field(
        name="startTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Start time of the correlated event."""
    end_time: Optional[datetime.datetime] = rest_field(
        name="endTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """End time of the correlated event."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Message describing the event."""
    source: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Represents the name of the Detector."""
    priority: Optional[float] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Represents the rank of the Detector."""
    meta_data: Optional[list[list["_models.NameValuePair"]]] = rest_field(
        name="metaData", visibility=["read", "create", "update", "delete", "query"]
    )
    """Downtime metadata."""
    type: Optional[Union[str, "_models.IssueType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Represents the type of the Detector. Known values are: \"ServiceIncident\", \"AppDeployment\",
     \"AppCrash\", \"RuntimeIssueDetected\", \"AseDeployment\", \"UserIssue\", \"PlatformIssue\",
     and \"Other\"."""
    solutions: Optional[list["_models.Solution"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """List of proposed solutions."""

    @overload
    def __init__(
        self,
        *,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        message: Optional[str] = None,
        source: Optional[str] = None,
        priority: Optional[float] = None,
        meta_data: Optional[list[list["_models.NameValuePair"]]] = None,
        type: Optional[Union[str, "_models.IssueType"]] = None,
        solutions: Optional[list["_models.Solution"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DetectorDefinition(_Model):
    """Class representing detector definition.

    :ivar display_name: Display name of the detector.
    :vartype display_name: str
    :ivar description: Description of the detector.
    :vartype description: str
    :ivar rank: Detector Rank.
    :vartype rank: float
    :ivar is_enabled: Flag representing whether detector is enabled or not.
    :vartype is_enabled: bool
    """

    display_name: Optional[str] = rest_field(name="displayName", visibility=["read"])
    """Display name of the detector."""
    description: Optional[str] = rest_field(visibility=["read"])
    """Description of the detector."""
    rank: Optional[float] = rest_field(visibility=["read"])
    """Detector Rank."""
    is_enabled: Optional[bool] = rest_field(name="isEnabled", visibility=["read"])
    """Flag representing whether detector is enabled or not."""


class DetectorDefinitionResource(ProxyResource):
    """ARM resource for a detector definition.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: Core resource properties.
    :vartype properties: ~azure.mgmt.web.models.DetectorDefinition
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.DetectorDefinition"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Core resource properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["display_name", "description", "rank", "is_enabled"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.DetectorDefinition"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class DetectorInfo(_Model):
    """Definition of Detector.

    :ivar id: Id of detector.
    :vartype id: str
    :ivar name: Name of detector.
    :vartype name: str
    :ivar description: Short description of the detector and its purpose.
    :vartype description: str
    :ivar author: Author of the detector.
    :vartype author: str
    :ivar category: Problem category. This serves for organizing group for detectors.
    :vartype category: str
    :ivar support_topic_list: List of Support Topics for which this detector is enabled.
    :vartype support_topic_list: list[~azure.mgmt.web.models.SupportTopic]
    :ivar analysis_type: Analysis Types for which this detector should apply to.
    :vartype analysis_type: list[str]
    :ivar type: Whether this detector is an Analysis Detector or not. Known values are: "Detector",
     "Analysis", and "CategoryOverview".
    :vartype type: str or ~azure.mgmt.web.models.DetectorType
    :ivar score: Defines score of a detector to power ML based matching.
    :vartype score: float
    """

    id: Optional[str] = rest_field(visibility=["read"])
    """Id of detector."""
    name: Optional[str] = rest_field(visibility=["read"])
    """Name of detector."""
    description: Optional[str] = rest_field(visibility=["read"])
    """Short description of the detector and its purpose."""
    author: Optional[str] = rest_field(visibility=["read"])
    """Author of the detector."""
    category: Optional[str] = rest_field(visibility=["read"])
    """Problem category. This serves for organizing group for detectors."""
    support_topic_list: Optional[list["_models.SupportTopic"]] = rest_field(
        name="supportTopicList", visibility=["read"]
    )
    """List of Support Topics for which this detector is enabled."""
    analysis_type: Optional[list[str]] = rest_field(name="analysisType", visibility=["read"])
    """Analysis Types for which this detector should apply to."""
    type: Optional[Union[str, "_models.DetectorType"]] = rest_field(visibility=["read"])
    """Whether this detector is an Analysis Detector or not. Known values are: \"Detector\",
     \"Analysis\", and \"CategoryOverview\"."""
    score: Optional[float] = rest_field(visibility=["read"])
    """Defines score of a detector to power ML based matching."""


class DetectorResponse(ProxyResource):
    """Class representing Response from Detector.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: DetectorResponse resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.DetectorResponseProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.DetectorResponseProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """DetectorResponse resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["metadata", "dataset", "status", "data_providers_metadata", "suggested_utterances"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.DetectorResponseProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class DetectorResponseProperties(_Model):
    """DetectorResponse resource specific properties.

    :ivar metadata: metadata for the detector.
    :vartype metadata: ~azure.mgmt.web.models.DetectorInfo
    :ivar dataset: Data Set.
    :vartype dataset: list[~azure.mgmt.web.models.DiagnosticData]
    :ivar status: Indicates status of the most severe insight.
    :vartype status: ~azure.mgmt.web.models.Status
    :ivar data_providers_metadata: Additional configuration for different data providers to be used
     by the UI.
    :vartype data_providers_metadata: list[~azure.mgmt.web.models.DataProviderMetadata]
    :ivar suggested_utterances: Suggested utterances where the detector can be applicable.
    :vartype suggested_utterances: ~azure.mgmt.web.models.QueryUtterancesResults
    """

    metadata: Optional["_models.DetectorInfo"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """metadata for the detector."""
    dataset: Optional[list["_models.DiagnosticData"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Data Set."""
    status: Optional["_models.Status"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Indicates status of the most severe insight."""
    data_providers_metadata: Optional[list["_models.DataProviderMetadata"]] = rest_field(
        name="dataProvidersMetadata", visibility=["read", "create", "update", "delete", "query"]
    )
    """Additional configuration for different data providers to be used by the UI."""
    suggested_utterances: Optional["_models.QueryUtterancesResults"] = rest_field(
        name="suggestedUtterances", visibility=["read", "create", "update", "delete", "query"]
    )
    """Suggested utterances where the detector can be applicable."""

    @overload
    def __init__(
        self,
        *,
        metadata: Optional["_models.DetectorInfo"] = None,
        dataset: Optional[list["_models.DiagnosticData"]] = None,
        status: Optional["_models.Status"] = None,
        data_providers_metadata: Optional[list["_models.DataProviderMetadata"]] = None,
        suggested_utterances: Optional["_models.QueryUtterancesResults"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DiagnosticAnalysis(ProxyOnlyResource):
    """Class representing a diagnostic analysis done on an application.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: DiagnosticAnalysis resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.DiagnosticAnalysisProperties
    """

    properties: Optional["_models.DiagnosticAnalysisProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """DiagnosticAnalysis resource specific properties."""

    __flattened_items = ["start_time", "end_time", "abnormal_time_periods", "payload", "non_correlated_detectors"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.DiagnosticAnalysisProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class DiagnosticAnalysisProperties(_Model):
    """DiagnosticAnalysis resource specific properties.

    :ivar start_time: Start time of the period.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: End time of the period.
    :vartype end_time: ~datetime.datetime
    :ivar abnormal_time_periods: List of time periods.
    :vartype abnormal_time_periods: list[~azure.mgmt.web.models.AbnormalTimePeriod]
    :ivar payload: Data by each detector.
    :vartype payload: list[~azure.mgmt.web.models.AnalysisData]
    :ivar non_correlated_detectors: Data by each detector for detectors that did not corelate.
    :vartype non_correlated_detectors: list[~azure.mgmt.web.models.DetectorDefinition]
    """

    start_time: Optional[datetime.datetime] = rest_field(
        name="startTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Start time of the period."""
    end_time: Optional[datetime.datetime] = rest_field(
        name="endTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """End time of the period."""
    abnormal_time_periods: Optional[list["_models.AbnormalTimePeriod"]] = rest_field(
        name="abnormalTimePeriods", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of time periods."""
    payload: Optional[list["_models.AnalysisData"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Data by each detector."""
    non_correlated_detectors: Optional[list["_models.DetectorDefinition"]] = rest_field(
        name="nonCorrelatedDetectors", visibility=["read", "create", "update", "delete", "query"]
    )
    """Data by each detector for detectors that did not corelate."""

    @overload
    def __init__(
        self,
        *,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        abnormal_time_periods: Optional[list["_models.AbnormalTimePeriod"]] = None,
        payload: Optional[list["_models.AnalysisData"]] = None,
        non_correlated_detectors: Optional[list["_models.DetectorDefinition"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DiagnosticCategory(ProxyResource):
    """Class representing detector definition.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: DiagnosticCategory resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.DiagnosticCategoryProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.DiagnosticCategoryProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """DiagnosticCategory resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["description"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.DiagnosticCategoryProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class DiagnosticCategoryProperties(_Model):
    """DiagnosticCategory resource specific properties.

    :ivar description: Description of the diagnostic category.
    :vartype description: str
    """

    description: Optional[str] = rest_field(visibility=["read"])
    """Description of the diagnostic category."""


class DiagnosticData(_Model):
    """Set of data with rendering instructions.

    :ivar table: Data in table form.
    :vartype table: ~azure.mgmt.web.models.DataTableResponseObject
    :ivar rendering_properties: Properties that describe how the table should be rendered.
    :vartype rendering_properties: ~azure.mgmt.web.models.Rendering
    """

    table: Optional["_models.DataTableResponseObject"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Data in table form."""
    rendering_properties: Optional["_models.Rendering"] = rest_field(
        name="renderingProperties", visibility=["read", "create", "update", "delete", "query"]
    )
    """Properties that describe how the table should be rendered."""

    @overload
    def __init__(
        self,
        *,
        table: Optional["_models.DataTableResponseObject"] = None,
        rendering_properties: Optional["_models.Rendering"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DiagnosticDetectorResponse(ProxyOnlyResource):
    """Class representing Response from Diagnostic Detectors.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: DiagnosticDetectorResponse resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.DiagnosticDetectorResponseProperties
    """

    properties: Optional["_models.DiagnosticDetectorResponseProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """DiagnosticDetectorResponse resource specific properties."""

    __flattened_items = [
        "start_time",
        "end_time",
        "issue_detected",
        "detector_definition",
        "metrics",
        "abnormal_time_periods",
        "data",
        "response_meta_data",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.DiagnosticDetectorResponseProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class DiagnosticDetectorResponseProperties(_Model):
    """DiagnosticDetectorResponse resource specific properties.

    :ivar start_time: Start time of the period.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: End time of the period.
    :vartype end_time: ~datetime.datetime
    :ivar issue_detected: Flag representing Issue was detected.
    :vartype issue_detected: bool
    :ivar detector_definition: Detector's definition.
    :vartype detector_definition: ~azure.mgmt.web.models.DetectorDefinition
    :ivar metrics: Metrics provided by the detector.
    :vartype metrics: list[~azure.mgmt.web.models.DiagnosticMetricSet]
    :ivar abnormal_time_periods: List of Correlated events found by the detector.
    :vartype abnormal_time_periods: list[~azure.mgmt.web.models.DetectorAbnormalTimePeriod]
    :ivar data: Additional Data that detector wants to send.
    :vartype data: list[list[~azure.mgmt.web.models.NameValuePair]]
    :ivar response_meta_data: Meta Data.
    :vartype response_meta_data: ~azure.mgmt.web.models.ResponseMetaData
    """

    start_time: Optional[datetime.datetime] = rest_field(
        name="startTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Start time of the period."""
    end_time: Optional[datetime.datetime] = rest_field(
        name="endTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """End time of the period."""
    issue_detected: Optional[bool] = rest_field(
        name="issueDetected", visibility=["read", "create", "update", "delete", "query"]
    )
    """Flag representing Issue was detected."""
    detector_definition: Optional["_models.DetectorDefinition"] = rest_field(
        name="detectorDefinition", visibility=["read", "create", "update", "delete", "query"]
    )
    """Detector's definition."""
    metrics: Optional[list["_models.DiagnosticMetricSet"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Metrics provided by the detector."""
    abnormal_time_periods: Optional[list["_models.DetectorAbnormalTimePeriod"]] = rest_field(
        name="abnormalTimePeriods", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of Correlated events found by the detector."""
    data: Optional[list[list["_models.NameValuePair"]]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Additional Data that detector wants to send."""
    response_meta_data: Optional["_models.ResponseMetaData"] = rest_field(
        name="responseMetaData", visibility=["read", "create", "update", "delete", "query"]
    )
    """Meta Data."""

    @overload
    def __init__(
        self,
        *,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        issue_detected: Optional[bool] = None,
        detector_definition: Optional["_models.DetectorDefinition"] = None,
        metrics: Optional[list["_models.DiagnosticMetricSet"]] = None,
        abnormal_time_periods: Optional[list["_models.DetectorAbnormalTimePeriod"]] = None,
        data: Optional[list[list["_models.NameValuePair"]]] = None,
        response_meta_data: Optional["_models.ResponseMetaData"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DiagnosticMetricSample(_Model):
    """Class representing Diagnostic Metric.

    :ivar timestamp: Time at which metric is measured.
    :vartype timestamp: ~datetime.datetime
    :ivar role_instance: Role Instance. Null if this counter is not per instance This is returned
     and should be whichever instance name we desire to be returned i.e. CPU and Memory return
     RDWORKERNAME (LargeDed..._IN_0) where RDWORKERNAME is Machine name below and RoleInstance name
     in parenthesis.
    :vartype role_instance: str
    :ivar total: Total value of the metric. If multiple measurements are made this will have sum of
     all.
    :vartype total: float
    :ivar maximum: Maximum of the metric sampled during the time period.
    :vartype maximum: float
    :ivar minimum: Minimum of the metric sampled during the time period.
    :vartype minimum: float
    :ivar is_aggregated: Whether the values are aggregates across all workers or not.
    :vartype is_aggregated: bool
    """

    timestamp: Optional[datetime.datetime] = rest_field(
        visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Time at which metric is measured."""
    role_instance: Optional[str] = rest_field(
        name="roleInstance", visibility=["read", "create", "update", "delete", "query"]
    )
    """Role Instance. Null if this counter is not per instance This is returned and should be
     whichever instance name we desire to be returned i.e. CPU and Memory return RDWORKERNAME
     (LargeDed..._IN_0) where RDWORKERNAME is Machine name below and RoleInstance name in
     parenthesis."""
    total: Optional[float] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Total value of the metric. If multiple measurements are made this will have sum of all."""
    maximum: Optional[float] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Maximum of the metric sampled during the time period."""
    minimum: Optional[float] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Minimum of the metric sampled during the time period."""
    is_aggregated: Optional[bool] = rest_field(
        name="isAggregated", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether the values are aggregates across all workers or not."""

    @overload
    def __init__(
        self,
        *,
        timestamp: Optional[datetime.datetime] = None,
        role_instance: Optional[str] = None,
        total: Optional[float] = None,
        maximum: Optional[float] = None,
        minimum: Optional[float] = None,
        is_aggregated: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DiagnosticMetricSet(_Model):
    """Class representing Diagnostic Metric information.

    :ivar name: Name of the metric.
    :vartype name: str
    :ivar unit: Metric's unit.
    :vartype unit: str
    :ivar start_time: Start time of the period.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: End time of the period.
    :vartype end_time: ~datetime.datetime
    :ivar time_grain: Presented time grain. Supported grains at the moment are PT1M, PT1H, P1D.
    :vartype time_grain: str
    :ivar values_property: Collection of metric values for the selected period based on the
     {Microsoft.Web.Hosting.Administration.DiagnosticMetricSet.TimeGrain}.
    :vartype values_property: list[~azure.mgmt.web.models.DiagnosticMetricSample]
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the metric."""
    unit: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Metric's unit."""
    start_time: Optional[datetime.datetime] = rest_field(
        name="startTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Start time of the period."""
    end_time: Optional[datetime.datetime] = rest_field(
        name="endTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """End time of the period."""
    time_grain: Optional[str] = rest_field(name="timeGrain", visibility=["read", "create", "update", "delete", "query"])
    """Presented time grain. Supported grains at the moment are PT1M, PT1H, P1D."""
    values_property: Optional[list["_models.DiagnosticMetricSample"]] = rest_field(
        name="values", visibility=["read", "create", "update", "delete", "query"], original_tsp_name="values"
    )
    """Collection of metric values for the selected period based on the
     {Microsoft.Web.Hosting.Administration.DiagnosticMetricSet.TimeGrain}."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        unit: Optional[str] = None,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        time_grain: Optional[str] = None,
        values_property: Optional[list["_models.DiagnosticMetricSample"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Dimension(_Model):
    """Dimension of a resource metric. For e.g. instance specific HTTP requests for a web app, where
    instance name is dimension of the metric HTTP request.

    :ivar name:
    :vartype name: str
    :ivar display_name:
    :vartype display_name: str
    :ivar internal_name:
    :vartype internal_name: str
    :ivar to_be_exported_for_shoebox:
    :vartype to_be_exported_for_shoebox: bool
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    display_name: Optional[str] = rest_field(
        name="displayName", visibility=["read", "create", "update", "delete", "query"]
    )
    internal_name: Optional[str] = rest_field(
        name="internalName", visibility=["read", "create", "update", "delete", "query"]
    )
    to_be_exported_for_shoebox: Optional[bool] = rest_field(
        name="toBeExportedForShoebox", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        display_name: Optional[str] = None,
        internal_name: Optional[str] = None,
        to_be_exported_for_shoebox: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DnlResourceNameAvailability(_Model):
    """Information regarding availability of a resource name for DNL apps with regionalized default
    hostnames.

    :ivar host_name:
    :vartype host_name: str
    :ivar name_available: <code>true</code> indicates name is valid and available.
     <code>false</code> indicates the name is invalid, unavailable, or both.
    :vartype name_available: bool
    :ivar reason: <code>Invalid</code> indicates the name provided does not match Azure App Service
     naming requirements. <code>AlreadyExists</code> indicates that the name is already in use and
     is therefore unavailable. Known values are: "Invalid" and "AlreadyExists".
    :vartype reason: str or ~azure.mgmt.web.models.InAvailabilityReasonType
    :ivar message: If reason == invalid, provide the user with the reason why the given name is
     invalid, and provide the resource naming requirements so that the user can select a valid name.
     If reason == AlreadyExists, explain that resource name is already in use, and direct them to
     select a different name.
    :vartype message: str
    """

    host_name: Optional[str] = rest_field(name="hostName", visibility=["read", "create", "update", "delete", "query"])
    name_available: Optional[bool] = rest_field(
        name="nameAvailable", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> indicates name is valid and available. <code>false</code> indicates the name
     is invalid, unavailable, or both."""
    reason: Optional[Union[str, "_models.InAvailabilityReasonType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>Invalid</code> indicates the name provided does not match Azure App Service naming
     requirements. <code>AlreadyExists</code> indicates that the name is already in use and is
     therefore unavailable. Known values are: \"Invalid\" and \"AlreadyExists\"."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """If reason == invalid, provide the user with the reason why the given name is invalid, and
     provide the resource naming requirements so that the user can select a valid name. If reason ==
     AlreadyExists, explain that resource name is already in use, and direct them to select a
     different name."""

    @overload
    def __init__(
        self,
        *,
        host_name: Optional[str] = None,
        name_available: Optional[bool] = None,
        reason: Optional[Union[str, "_models.InAvailabilityReasonType"]] = None,
        message: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class DnlResourceNameAvailabilityRequest(_Model):
    """DnlResourceNameAvailabilityRequest.

    :ivar resource_group_name: Resource group name.
    :vartype resource_group_name: str
    :ivar auto_generated_domain_name_label_scope: Indicates the endpoint name reuse scope.The
     default value is TenantReuse. Supported values are TenantReuse, SubscriptionReuse,
     ResourceGroupReuse, NoReuse.
    :vartype auto_generated_domain_name_label_scope: str
    :ivar name: Resource name to verify. Required.
    :vartype name: str
    :ivar type: Resource type used for verification. Required. Known values are: "Site", "Slot",
     "HostingEnvironment", "PublishingUser", "Microsoft.Web/sites", "Microsoft.Web/sites/slots",
     "Microsoft.Web/hostingEnvironments", and "Microsoft.Web/publishingUsers".
    :vartype type: str or ~azure.mgmt.web.models.CheckNameResourceTypes
    """

    resource_group_name: Optional[str] = rest_field(
        name="resourceGroupName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource group name."""
    auto_generated_domain_name_label_scope: Optional[str] = rest_field(
        name="autoGeneratedDomainNameLabelScope", visibility=["read", "create", "update", "delete", "query"]
    )
    """Indicates the endpoint name reuse scope.The default value is TenantReuse. Supported values are
     TenantReuse, SubscriptionReuse, ResourceGroupReuse, NoReuse."""
    name: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Resource name to verify. Required."""
    type: Union[str, "_models.CheckNameResourceTypes"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource type used for verification. Required. Known values are: \"Site\", \"Slot\",
     \"HostingEnvironment\", \"PublishingUser\", \"Microsoft.Web/sites\",
     \"Microsoft.Web/sites/slots\", \"Microsoft.Web/hostingEnvironments\", and
     \"Microsoft.Web/publishingUsers\"."""

    @overload
    def __init__(
        self,
        *,
        name: str,
        type: Union[str, "_models.CheckNameResourceTypes"],
        resource_group_name: Optional[str] = None,
        auto_generated_domain_name_label_scope: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class EnabledConfig(_Model):
    """Enabled configuration.

    :ivar enabled: True if configuration is enabled, false if it is disabled and null if
     configuration is not set.
    :vartype enabled: bool
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """True if configuration is enabled, false if it is disabled and null if configuration is not set."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class EndpointDependency(_Model):
    """A domain name that a service is reached at, including details of the current connection status.

    :ivar domain_name: The domain name of the dependency.
    :vartype domain_name: str
    :ivar endpoint_details: The IP Addresses and Ports used when connecting to DomainName.
    :vartype endpoint_details: list[~azure.mgmt.web.models.EndpointDetail]
    """

    domain_name: Optional[str] = rest_field(
        name="domainName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The domain name of the dependency."""
    endpoint_details: Optional[list["_models.EndpointDetail"]] = rest_field(
        name="endpointDetails", visibility=["read", "create", "update", "delete", "query"]
    )
    """The IP Addresses and Ports used when connecting to DomainName."""

    @overload
    def __init__(
        self,
        *,
        domain_name: Optional[str] = None,
        endpoint_details: Optional[list["_models.EndpointDetail"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class EndpointDetail(_Model):
    """Current TCP connectivity information from the App Service Environment to a single endpoint.

    :ivar ip_address: An IP Address that Domain Name currently resolves to.
    :vartype ip_address: str
    :ivar port: The port an endpoint is connected to.
    :vartype port: int
    :ivar latency: The time in milliseconds it takes for a TCP connection to be created from the
     App Service Environment to this IpAddress at this Port.
    :vartype latency: float
    :ivar is_accessible: Whether it is possible to create a TCP connection from the App Service
     Environment to this IpAddress at this Port.
    :vartype is_accessible: bool
    """

    ip_address: Optional[str] = rest_field(name="ipAddress", visibility=["read", "create", "update", "delete", "query"])
    """An IP Address that Domain Name currently resolves to."""
    port: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The port an endpoint is connected to."""
    latency: Optional[float] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The time in milliseconds it takes for a TCP connection to be created from the App Service
     Environment to this IpAddress at this Port."""
    is_accessible: Optional[bool] = rest_field(
        name="isAccessible", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether it is possible to create a TCP connection from the App Service Environment to this
     IpAddress at this Port."""

    @overload
    def __init__(
        self,
        *,
        ip_address: Optional[str] = None,
        port: Optional[int] = None,
        latency: Optional[float] = None,
        is_accessible: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class EnvironmentVariable(_Model):
    """EnvironmentVariable.

    :ivar name: Environment variable name. Required.
    :vartype name: str
    :ivar value: The value of this environment variable must be the name of an AppSetting. The
     actual value of the environment variable in container will be retrieved from the specified
     AppSetting at runtime. If the AppSetting is not found, the value will be set to an empty string
     in the container at runtime. Required.
    :vartype value: str
    """

    name: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Environment variable name. Required."""
    value: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The value of this environment variable must be the name of an AppSetting. The actual value of
     the environment variable in container will be retrieved from the specified AppSetting at
     runtime. If the AppSetting is not found, the value will be set to an empty string in the
     container at runtime. Required."""

    @overload
    def __init__(
        self,
        *,
        name: str,
        value: str,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ErrorEntity(_Model):
    """Body of the error response returned from the API.

    :ivar extended_code: Type of error.
    :vartype extended_code: str
    :ivar message_template: Message template.
    :vartype message_template: str
    :ivar parameters: Parameters for the template.
    :vartype parameters: list[str]
    :ivar inner_errors: Inner errors.
    :vartype inner_errors: list[~azure.mgmt.web.models.ErrorEntity]
    :ivar details: Error Details.
    :vartype details: list[~azure.mgmt.web.models.ErrorEntity]
    :ivar target: The error target.
    :vartype target: str
    :ivar code: Basic error code.
    :vartype code: str
    :ivar message: Any details of the error.
    :vartype message: str
    """

    extended_code: Optional[str] = rest_field(
        name="extendedCode", visibility=["read", "create", "update", "delete", "query"]
    )
    """Type of error."""
    message_template: Optional[str] = rest_field(
        name="messageTemplate", visibility=["read", "create", "update", "delete", "query"]
    )
    """Message template."""
    parameters: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Parameters for the template."""
    inner_errors: Optional[list["_models.ErrorEntity"]] = rest_field(
        name="innerErrors", visibility=["read", "create", "update", "delete", "query"]
    )
    """Inner errors."""
    details: Optional[list["_models.ErrorEntity"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Error Details."""
    target: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The error target."""
    code: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Basic error code."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Any details of the error."""

    @overload
    def __init__(
        self,
        *,
        extended_code: Optional[str] = None,
        message_template: Optional[str] = None,
        parameters: Optional[list[str]] = None,
        inner_errors: Optional[list["_models.ErrorEntity"]] = None,
        details: Optional[list["_models.ErrorEntity"]] = None,
        target: Optional[str] = None,
        code: Optional[str] = None,
        message: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ErrorProperties(_Model):
    """Error properties indicate why the Logic service was not able to process the incoming request.
    The reason is provided in the error message.

    :ivar code: Error code.
    :vartype code: str
    :ivar message: Error message indicating why the operation failed.
    :vartype message: str
    """

    code: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Error code."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Error message indicating why the operation failed."""

    @overload
    def __init__(
        self,
        *,
        code: Optional[str] = None,
        message: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Experiments(_Model):
    """Routing rules in production experiments.

    :ivar ramp_up_rules: List of ramp-up rules.
    :vartype ramp_up_rules: list[~azure.mgmt.web.models.RampUpRule]
    """

    ramp_up_rules: Optional[list["_models.RampUpRule"]] = rest_field(
        name="rampUpRules", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of ramp-up rules."""

    @overload
    def __init__(
        self,
        *,
        ramp_up_rules: Optional[list["_models.RampUpRule"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Expression(_Model):
    """The expression.

    :ivar text: The text.
    :vartype text: str
    :ivar value: Anything.
    :vartype value: any
    :ivar subexpressions: The sub expressions.
    :vartype subexpressions: list[~azure.mgmt.web.models.Expression]
    :ivar error: The azure resource error info.
    :vartype error: ~azure.mgmt.web.models.AzureResourceErrorInfo
    """

    text: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The text."""
    value: Optional[Any] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Anything."""
    subexpressions: Optional[list["_models.Expression"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The sub expressions."""
    error: Optional["_models.AzureResourceErrorInfo"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The azure resource error info."""

    @overload
    def __init__(
        self,
        *,
        text: Optional[str] = None,
        value: Optional[Any] = None,
        subexpressions: Optional[list["_models.Expression"]] = None,
        error: Optional["_models.AzureResourceErrorInfo"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ExpressionRoot(Expression):
    """The expression root.

    :ivar text: The text.
    :vartype text: str
    :ivar value: Anything.
    :vartype value: any
    :ivar subexpressions: The sub expressions.
    :vartype subexpressions: list[~azure.mgmt.web.models.Expression]
    :ivar error: The azure resource error info.
    :vartype error: ~azure.mgmt.web.models.AzureResourceErrorInfo
    :ivar path: The path.
    :vartype path: str
    """

    path: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The path."""

    @overload
    def __init__(
        self,
        *,
        text: Optional[str] = None,
        value: Optional[Any] = None,
        subexpressions: Optional[list["_models.Expression"]] = None,
        error: Optional["_models.AzureResourceErrorInfo"] = None,
        path: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ExtendedLocation(_Model):
    """Extended Location.

    :ivar name: Name of extended location.
    :vartype name: str
    :ivar type: Type of extended location.
    :vartype type: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of extended location."""
    type: Optional[str] = rest_field(visibility=["read"])
    """Type of extended location."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Facebook(_Model):
    """The configuration settings of the Facebook provider.

    :ivar enabled: <code>false</code> if the Facebook provider should not be enabled despite the
     set registration; otherwise, <code>true</code>.
    :vartype enabled: bool
    :ivar registration: The configuration settings of the app registration for the Facebook
     provider.
    :vartype registration: ~azure.mgmt.web.models.AppRegistration
    :ivar graph_api_version: The version of the Facebook api to be used while logging in.
    :vartype graph_api_version: str
    :ivar login: The configuration settings of the login flow.
    :vartype login: ~azure.mgmt.web.models.LoginScopes
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>false</code> if the Facebook provider should not be enabled despite the set registration;
     otherwise, <code>true</code>."""
    registration: Optional["_models.AppRegistration"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the app registration for the Facebook provider."""
    graph_api_version: Optional[str] = rest_field(
        name="graphApiVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """The version of the Facebook api to be used while logging in."""
    login: Optional["_models.LoginScopes"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The configuration settings of the login flow."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        registration: Optional["_models.AppRegistration"] = None,
        graph_api_version: Optional[str] = None,
        login: Optional["_models.LoginScopes"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FileSystemApplicationLogsConfig(_Model):
    """Application logs to file system configuration.

    :ivar level: Log level. Known values are: "Off", "Verbose", "Information", "Warning", and
     "Error".
    :vartype level: str or ~azure.mgmt.web.models.LogLevel
    """

    level: Optional[Union[str, "_models.LogLevel"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Log level. Known values are: \"Off\", \"Verbose\", \"Information\", \"Warning\", and \"Error\"."""

    @overload
    def __init__(
        self,
        *,
        level: Optional[Union[str, "_models.LogLevel"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FileSystemHttpLogsConfig(_Model):
    """Http logs to file system configuration.

    :ivar retention_in_mb: Maximum size in megabytes that http log files can use. When reached old
     log files will be removed to make space for new ones. Value can range between 25 and 100.
    :vartype retention_in_mb: int
    :ivar retention_in_days: Retention in days. Remove files older than X days. 0 or lower means no
     retention.
    :vartype retention_in_days: int
    :ivar enabled: True if configuration is enabled, false if it is disabled and null if
     configuration is not set.
    :vartype enabled: bool
    """

    retention_in_mb: Optional[int] = rest_field(
        name="retentionInMb", visibility=["read", "create", "update", "delete", "query"]
    )
    """Maximum size in megabytes that http log files can use. When reached old log files will be
     removed to make space for new ones. Value can range between 25 and 100."""
    retention_in_days: Optional[int] = rest_field(
        name="retentionInDays", visibility=["read", "create", "update", "delete", "query"]
    )
    """Retention in days. Remove files older than X days. 0 or lower means no retention."""
    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """True if configuration is enabled, false if it is disabled and null if configuration is not set."""

    @overload
    def __init__(
        self,
        *,
        retention_in_mb: Optional[int] = None,
        retention_in_days: Optional[int] = None,
        enabled: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FileSystemTokenStore(_Model):
    """The configuration settings of the storage of the tokens if a file system is used.

    :ivar directory: The directory in which the tokens will be stored.
    :vartype directory: str
    """

    directory: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The directory in which the tokens will be stored."""

    @overload
    def __init__(
        self,
        *,
        directory: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FlowAccessControlConfiguration(_Model):
    """The access control configuration.

    :ivar triggers: The access control configuration for invoking workflow triggers.
    :vartype triggers: ~azure.mgmt.web.models.FlowAccessControlConfigurationPolicy
    :ivar contents: The access control configuration for accessing workflow run contents.
    :vartype contents: ~azure.mgmt.web.models.FlowAccessControlConfigurationPolicy
    :ivar actions: The access control configuration for workflow actions.
    :vartype actions: ~azure.mgmt.web.models.FlowAccessControlConfigurationPolicy
    :ivar workflow_management: The access control configuration for workflow management.
    :vartype workflow_management: ~azure.mgmt.web.models.FlowAccessControlConfigurationPolicy
    """

    triggers: Optional["_models.FlowAccessControlConfigurationPolicy"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The access control configuration for invoking workflow triggers."""
    contents: Optional["_models.FlowAccessControlConfigurationPolicy"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The access control configuration for accessing workflow run contents."""
    actions: Optional["_models.FlowAccessControlConfigurationPolicy"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The access control configuration for workflow actions."""
    workflow_management: Optional["_models.FlowAccessControlConfigurationPolicy"] = rest_field(
        name="workflowManagement", visibility=["read", "create", "update", "delete", "query"]
    )
    """The access control configuration for workflow management."""

    @overload
    def __init__(
        self,
        *,
        triggers: Optional["_models.FlowAccessControlConfigurationPolicy"] = None,
        contents: Optional["_models.FlowAccessControlConfigurationPolicy"] = None,
        actions: Optional["_models.FlowAccessControlConfigurationPolicy"] = None,
        workflow_management: Optional["_models.FlowAccessControlConfigurationPolicy"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FlowAccessControlConfigurationPolicy(_Model):
    """The access control configuration policy.

    :ivar allowed_caller_ip_addresses: The allowed caller IP address ranges.
    :vartype allowed_caller_ip_addresses: list[~azure.mgmt.web.models.IpAddressRange]
    :ivar open_authentication_policies: The authentication policies for workflow.
    :vartype open_authentication_policies: ~azure.mgmt.web.models.OpenAuthenticationAccessPolicies
    """

    allowed_caller_ip_addresses: Optional[list["_models.IpAddressRange"]] = rest_field(
        name="allowedCallerIpAddresses", visibility=["read", "create", "update", "delete", "query"]
    )
    """The allowed caller IP address ranges."""
    open_authentication_policies: Optional["_models.OpenAuthenticationAccessPolicies"] = rest_field(
        name="openAuthenticationPolicies", visibility=["read", "create", "update", "delete", "query"]
    )
    """The authentication policies for workflow."""

    @overload
    def __init__(
        self,
        *,
        allowed_caller_ip_addresses: Optional[list["_models.IpAddressRange"]] = None,
        open_authentication_policies: Optional["_models.OpenAuthenticationAccessPolicies"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FlowEndpoints(_Model):
    """The flow endpoints configuration.

    :ivar outgoing_ip_addresses: The outgoing ip address.
    :vartype outgoing_ip_addresses: list[~azure.mgmt.web.models.IpAddress]
    :ivar access_endpoint_ip_addresses: The access endpoint ip address.
    :vartype access_endpoint_ip_addresses: list[~azure.mgmt.web.models.IpAddress]
    """

    outgoing_ip_addresses: Optional[list["_models.IpAddress"]] = rest_field(
        name="outgoingIpAddresses", visibility=["read", "create", "update", "delete", "query"]
    )
    """The outgoing ip address."""
    access_endpoint_ip_addresses: Optional[list["_models.IpAddress"]] = rest_field(
        name="accessEndpointIpAddresses", visibility=["read", "create", "update", "delete", "query"]
    )
    """The access endpoint ip address."""

    @overload
    def __init__(
        self,
        *,
        outgoing_ip_addresses: Optional[list["_models.IpAddress"]] = None,
        access_endpoint_ip_addresses: Optional[list["_models.IpAddress"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FlowEndpointsConfiguration(_Model):
    """The endpoints configuration.

    :ivar workflow: The workflow endpoints.
    :vartype workflow: ~azure.mgmt.web.models.FlowEndpoints
    :ivar connector: The connector endpoints.
    :vartype connector: ~azure.mgmt.web.models.FlowEndpoints
    """

    workflow: Optional["_models.FlowEndpoints"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The workflow endpoints."""
    connector: Optional["_models.FlowEndpoints"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The connector endpoints."""

    @overload
    def __init__(
        self,
        *,
        workflow: Optional["_models.FlowEndpoints"] = None,
        connector: Optional["_models.FlowEndpoints"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ForwardProxy(_Model):
    """The configuration settings of a forward proxy used to make the requests.

    :ivar convention: The convention used to determine the url of the request made. Known values
     are: "NoProxy", "Standard", and "Custom".
    :vartype convention: str or ~azure.mgmt.web.models.ForwardProxyConvention
    :ivar custom_host_header_name: The name of the header containing the host of the request.
    :vartype custom_host_header_name: str
    :ivar custom_proto_header_name: The name of the header containing the scheme of the request.
    :vartype custom_proto_header_name: str
    """

    convention: Optional[Union[str, "_models.ForwardProxyConvention"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The convention used to determine the url of the request made. Known values are: \"NoProxy\",
     \"Standard\", and \"Custom\"."""
    custom_host_header_name: Optional[str] = rest_field(
        name="customHostHeaderName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The name of the header containing the host of the request."""
    custom_proto_header_name: Optional[str] = rest_field(
        name="customProtoHeaderName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The name of the header containing the scheme of the request."""

    @overload
    def __init__(
        self,
        *,
        convention: Optional[Union[str, "_models.ForwardProxyConvention"]] = None,
        custom_host_header_name: Optional[str] = None,
        custom_proto_header_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FrontEndConfiguration(_Model):
    """FrontEndConfiguration.

    :ivar kind: Known values are: "NodePort" and "LoadBalancer".
    :vartype kind: str or ~azure.mgmt.web.models.FrontEndServiceType
    """

    kind: Optional[Union[str, "_models.FrontEndServiceType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Known values are: \"NodePort\" and \"LoadBalancer\"."""

    @overload
    def __init__(
        self,
        *,
        kind: Optional[Union[str, "_models.FrontEndServiceType"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FunctionAppConfig(_Model):
    """Function app configuration.

    :ivar deployment: Function app deployment configuration.
    :vartype deployment: ~azure.mgmt.web.models.FunctionsDeployment
    :ivar runtime: Function app runtime settings.
    :vartype runtime: ~azure.mgmt.web.models.FunctionsRuntime
    :ivar scale_and_concurrency: Function app scale and concurrency settings.
    :vartype scale_and_concurrency: ~azure.mgmt.web.models.FunctionsScaleAndConcurrency
    :ivar site_update_strategy: Function app site update strategy configuration.
    :vartype site_update_strategy: ~azure.mgmt.web.models.FunctionsSiteUpdateStrategy
    """

    deployment: Optional["_models.FunctionsDeployment"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Function app deployment configuration."""
    runtime: Optional["_models.FunctionsRuntime"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Function app runtime settings."""
    scale_and_concurrency: Optional["_models.FunctionsScaleAndConcurrency"] = rest_field(
        name="scaleAndConcurrency", visibility=["read", "create", "update", "delete", "query"]
    )
    """Function app scale and concurrency settings."""
    site_update_strategy: Optional["_models.FunctionsSiteUpdateStrategy"] = rest_field(
        name="siteUpdateStrategy", visibility=["read", "create", "update", "delete", "query"]
    )
    """Function app site update strategy configuration."""

    @overload
    def __init__(
        self,
        *,
        deployment: Optional["_models.FunctionsDeployment"] = None,
        runtime: Optional["_models.FunctionsRuntime"] = None,
        scale_and_concurrency: Optional["_models.FunctionsScaleAndConcurrency"] = None,
        site_update_strategy: Optional["_models.FunctionsSiteUpdateStrategy"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FunctionAppMajorVersion(_Model):
    """Function App stack major version.

    :ivar display_text: Function App stack major version (display only).
    :vartype display_text: str
    :ivar value: Function App stack major version name.
    :vartype value: str
    :ivar minor_versions: Minor versions associated with the major version.
    :vartype minor_versions: list[~azure.mgmt.web.models.FunctionAppMinorVersion]
    """

    display_text: Optional[str] = rest_field(name="displayText", visibility=["read"])
    """Function App stack major version (display only)."""
    value: Optional[str] = rest_field(visibility=["read"])
    """Function App stack major version name."""
    minor_versions: Optional[list["_models.FunctionAppMinorVersion"]] = rest_field(
        name="minorVersions", visibility=["read"]
    )
    """Minor versions associated with the major version."""


class FunctionAppMinorVersion(_Model):
    """Function App stack minor version.

    :ivar display_text: Function App stack (display only).
    :vartype display_text: str
    :ivar value: Function App stack name.
    :vartype value: str
    :ivar stack_settings: Settings associated with the minor version.
    :vartype stack_settings: ~azure.mgmt.web.models.FunctionAppRuntimes
    """

    display_text: Optional[str] = rest_field(name="displayText", visibility=["read"])
    """Function App stack (display only)."""
    value: Optional[str] = rest_field(visibility=["read"])
    """Function App stack name."""
    stack_settings: Optional["_models.FunctionAppRuntimes"] = rest_field(name="stackSettings", visibility=["read"])
    """Settings associated with the minor version."""


class FunctionAppRuntimes(_Model):
    """Function App stack runtimes.

    :ivar linux_runtime_settings: Linux-specific settings associated with the minor version.
    :vartype linux_runtime_settings: ~azure.mgmt.web.models.FunctionAppRuntimeSettings
    :ivar windows_runtime_settings: Windows-specific settings associated with the minor version.
    :vartype windows_runtime_settings: ~azure.mgmt.web.models.FunctionAppRuntimeSettings
    """

    linux_runtime_settings: Optional["_models.FunctionAppRuntimeSettings"] = rest_field(
        name="linuxRuntimeSettings", visibility=["read"]
    )
    """Linux-specific settings associated with the minor version."""
    windows_runtime_settings: Optional["_models.FunctionAppRuntimeSettings"] = rest_field(
        name="windowsRuntimeSettings", visibility=["read"]
    )
    """Windows-specific settings associated with the minor version."""


class FunctionAppRuntimeSettings(_Model):
    """Function App runtime settings.

    :ivar runtime_version: Function App stack minor version (runtime only).
    :vartype runtime_version: str
    :ivar remote_debugging_supported: <code>true</code> if remote debugging is supported for the
     stack; otherwise, <code>false</code>.
    :vartype remote_debugging_supported: bool
    :ivar app_insights_settings: Application Insights settings associated with the minor version.
    :vartype app_insights_settings: ~azure.mgmt.web.models.AppInsightsWebAppStackSettings
    :ivar git_hub_action_settings: GitHub Actions settings associated with the minor version.
    :vartype git_hub_action_settings: ~azure.mgmt.web.models.GitHubActionWebAppStackSettings
    :ivar app_settings_dictionary: Application settings associated with the minor version.
    :vartype app_settings_dictionary: dict[str, str]
    :ivar site_config_properties_dictionary: Configuration settings associated with the minor
     version.
    :vartype site_config_properties_dictionary:
     ~azure.mgmt.web.models.SiteConfigPropertiesDictionary
    :ivar supported_functions_extension_versions: List of supported Functions extension versions.
    :vartype supported_functions_extension_versions: list[str]
    :ivar is_preview: <code>true</code> if the stack is in preview; otherwise, <code>false</code>.
    :vartype is_preview: bool
    :ivar is_deprecated: <code>true</code> if the stack is deprecated; otherwise,
     <code>false</code>.
    :vartype is_deprecated: bool
    :ivar is_hidden: <code>true</code> if the stack should be hidden; otherwise,
     <code>false</code>.
    :vartype is_hidden: bool
    :ivar end_of_life_date: End-of-life date for the minor version.
    :vartype end_of_life_date: ~datetime.datetime
    :ivar is_auto_update: <code>true</code> if the stack version is auto-updated; otherwise,
     <code>false</code>.
    :vartype is_auto_update: bool
    :ivar is_early_access: <code>true</code> if the minor version is early-access; otherwise,
     <code>false</code>.
    :vartype is_early_access: bool
    :ivar is_default: <code>true</code> if the minor version the default; otherwise,
     <code>false</code>.
    :vartype is_default: bool
    """

    runtime_version: Optional[str] = rest_field(name="runtimeVersion", visibility=["read"])
    """Function App stack minor version (runtime only)."""
    remote_debugging_supported: Optional[bool] = rest_field(name="remoteDebuggingSupported", visibility=["read"])
    """<code>true</code> if remote debugging is supported for the stack; otherwise,
     <code>false</code>."""
    app_insights_settings: Optional["_models.AppInsightsWebAppStackSettings"] = rest_field(
        name="appInsightsSettings", visibility=["read"]
    )
    """Application Insights settings associated with the minor version."""
    git_hub_action_settings: Optional["_models.GitHubActionWebAppStackSettings"] = rest_field(
        name="gitHubActionSettings", visibility=["read"]
    )
    """GitHub Actions settings associated with the minor version."""
    app_settings_dictionary: Optional[dict[str, str]] = rest_field(name="appSettingsDictionary", visibility=["read"])
    """Application settings associated with the minor version."""
    site_config_properties_dictionary: Optional["_models.SiteConfigPropertiesDictionary"] = rest_field(
        name="siteConfigPropertiesDictionary", visibility=["read"]
    )
    """Configuration settings associated with the minor version."""
    supported_functions_extension_versions: Optional[list[str]] = rest_field(
        name="supportedFunctionsExtensionVersions", visibility=["read"]
    )
    """List of supported Functions extension versions."""
    is_preview: Optional[bool] = rest_field(name="isPreview", visibility=["read"])
    """<code>true</code> if the stack is in preview; otherwise, <code>false</code>."""
    is_deprecated: Optional[bool] = rest_field(name="isDeprecated", visibility=["read"])
    """<code>true</code> if the stack is deprecated; otherwise, <code>false</code>."""
    is_hidden: Optional[bool] = rest_field(name="isHidden", visibility=["read"])
    """<code>true</code> if the stack should be hidden; otherwise, <code>false</code>."""
    end_of_life_date: Optional[datetime.datetime] = rest_field(
        name="endOfLifeDate", visibility=["read"], format="rfc3339"
    )
    """End-of-life date for the minor version."""
    is_auto_update: Optional[bool] = rest_field(name="isAutoUpdate", visibility=["read"])
    """<code>true</code> if the stack version is auto-updated; otherwise, <code>false</code>."""
    is_early_access: Optional[bool] = rest_field(name="isEarlyAccess", visibility=["read"])
    """<code>true</code> if the minor version is early-access; otherwise, <code>false</code>."""
    is_default: Optional[bool] = rest_field(name="isDefault", visibility=["read"])
    """<code>true</code> if the minor version the default; otherwise, <code>false</code>."""


class FunctionAppStack(ProxyOnlyResource):
    """Function App Stack.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar location: Function App stack location.
    :vartype location: str
    :ivar properties: FunctionAppStack resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.FunctionAppStackProperties
    """

    location: Optional[str] = rest_field(visibility=["read"])
    """Function App stack location."""
    properties: Optional["_models.FunctionAppStackProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """FunctionAppStack resource specific properties."""

    __flattened_items = ["display_text", "value", "major_versions", "preferred_os"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.FunctionAppStackProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class FunctionAppStackProperties(_Model):
    """FunctionAppStack resource specific properties.

    :ivar display_text: Function App stack (display only).
    :vartype display_text: str
    :ivar value: Function App stack name.
    :vartype value: str
    :ivar major_versions: List of major versions available.
    :vartype major_versions: list[~azure.mgmt.web.models.FunctionAppMajorVersion]
    :ivar preferred_os: Function App stack preferred OS. Known values are: "Windows" and "Linux".
    :vartype preferred_os: str or ~azure.mgmt.web.models.StackPreferredOs
    """

    display_text: Optional[str] = rest_field(name="displayText", visibility=["read"])
    """Function App stack (display only)."""
    value: Optional[str] = rest_field(visibility=["read"])
    """Function App stack name."""
    major_versions: Optional[list["_models.FunctionAppMajorVersion"]] = rest_field(
        name="majorVersions", visibility=["read"]
    )
    """List of major versions available."""
    preferred_os: Optional[Union[str, "_models.StackPreferredOs"]] = rest_field(name="preferredOs", visibility=["read"])
    """Function App stack preferred OS. Known values are: \"Windows\" and \"Linux\"."""


class FunctionEnvelope(ProxyResource):
    """Function information.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: FunctionEnvelope resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.FunctionEnvelopeProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.FunctionEnvelopeProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """FunctionEnvelope resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "function_app_id",
        "script_root_path_href",
        "script_href",
        "config_href",
        "test_data_href",
        "secrets_file_href",
        "href",
        "config",
        "files",
        "test_data",
        "invoke_url_template",
        "language",
        "is_disabled",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.FunctionEnvelopeProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class FunctionEnvelopeProperties(_Model):
    """FunctionEnvelope resource specific properties.

    :ivar function_app_id: Function App ID.
    :vartype function_app_id: str
    :ivar script_root_path_href: Script root path URI.
    :vartype script_root_path_href: str
    :ivar script_href: Script URI.
    :vartype script_href: str
    :ivar config_href: Config URI.
    :vartype config_href: str
    :ivar test_data_href: Test data URI.
    :vartype test_data_href: str
    :ivar secrets_file_href: Secrets file URI.
    :vartype secrets_file_href: str
    :ivar href: Function URI.
    :vartype href: str
    :ivar config: Config information.
    :vartype config: any
    :ivar files: File list.
    :vartype files: dict[str, str]
    :ivar test_data: Test data used when testing via the Azure Portal.
    :vartype test_data: str
    :ivar invoke_url_template: The invocation URL.
    :vartype invoke_url_template: str
    :ivar language: The function language.
    :vartype language: str
    :ivar is_disabled: Gets or sets a value indicating whether the function is disabled.
    :vartype is_disabled: bool
    """

    function_app_id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Function App ID."""
    script_root_path_href: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Script root path URI."""
    script_href: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Script URI."""
    config_href: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Config URI."""
    test_data_href: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Test data URI."""
    secrets_file_href: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Secrets file URI."""
    href: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Function URI."""
    config: Optional[Any] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Config information."""
    files: Optional[dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """File list."""
    test_data: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Test data used when testing via the Azure Portal."""
    invoke_url_template: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The invocation URL."""
    language: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The function language."""
    is_disabled: Optional[bool] = rest_field(
        name="isDisabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets or sets a value indicating whether the function is disabled."""

    @overload
    def __init__(
        self,
        *,
        function_app_id: Optional[str] = None,
        script_root_path_href: Optional[str] = None,
        script_href: Optional[str] = None,
        config_href: Optional[str] = None,
        test_data_href: Optional[str] = None,
        secrets_file_href: Optional[str] = None,
        href: Optional[str] = None,
        config: Optional[Any] = None,
        files: Optional[dict[str, str]] = None,
        test_data: Optional[str] = None,
        invoke_url_template: Optional[str] = None,
        language: Optional[str] = None,
        is_disabled: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FunctionsAlwaysReadyConfig(_Model):
    """Sets the number of 'Always Ready' instances for a function group or a specific function.

    :ivar name: Either a function group or a function name is required. For additional information
     see `https://aka.ms/flexconsumption/alwaysready <https://aka.ms/flexconsumption/alwaysready>`_.
    :vartype name: str
    :ivar instance_count: Sets the number of 'Always Ready' instances for a given function group or
     a specific function. For additional information see `https://aka.ms/flexconsumption/alwaysready
     <https://aka.ms/flexconsumption/alwaysready>`_.
    :vartype instance_count: int
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Either a function group or a function name is required. For additional information see
     `https://aka.ms/flexconsumption/alwaysready <https://aka.ms/flexconsumption/alwaysready>`_."""
    instance_count: Optional[int] = rest_field(
        name="instanceCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """Sets the number of 'Always Ready' instances for a given function group or a specific function.
     For additional information see `https://aka.ms/flexconsumption/alwaysready
     <https://aka.ms/flexconsumption/alwaysready>`_."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        instance_count: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FunctionsDeployment(_Model):
    """Configuration section for the function app deployment.

    :ivar storage: Storage for deployed package used by the function app.
    :vartype storage: ~azure.mgmt.web.models.FunctionsDeploymentStorage
    """

    storage: Optional["_models.FunctionsDeploymentStorage"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Storage for deployed package used by the function app."""

    @overload
    def __init__(
        self,
        *,
        storage: Optional["_models.FunctionsDeploymentStorage"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FunctionsDeploymentStorage(_Model):
    """Storage for deployed package used by the function app.

    :ivar type: Property to select Azure Storage type. Available options: blobContainer.
     "blobContainer"
    :vartype type: str or ~azure.mgmt.web.models.FunctionsDeploymentStorageType
    :ivar value: Property to set the URL for the selected Azure Storage type. Example: For
     blobContainer, the value could be
     https://<storageAccountName>.blob.core.windows.net/<containerName>.
    :vartype value: str
    :ivar authentication: Authentication method to access the storage account for deployment.
    :vartype authentication: ~azure.mgmt.web.models.FunctionsDeploymentStorageAuthentication
    """

    type: Optional[Union[str, "_models.FunctionsDeploymentStorageType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Property to select Azure Storage type. Available options: blobContainer. \"blobContainer\""""
    value: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Property to set the URL for the selected Azure Storage type. Example: For blobContainer, the
     value could be https://<storageAccountName>.blob.core.windows.net/<containerName>."""
    authentication: Optional["_models.FunctionsDeploymentStorageAuthentication"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Authentication method to access the storage account for deployment."""

    @overload
    def __init__(
        self,
        *,
        type: Optional[Union[str, "_models.FunctionsDeploymentStorageType"]] = None,
        value: Optional[str] = None,
        authentication: Optional["_models.FunctionsDeploymentStorageAuthentication"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FunctionsDeploymentStorageAuthentication(_Model):
    """Authentication method to access the storage account for deployment.

    :ivar type: Property to select authentication type to access the selected storage account.
     Available options: SystemAssignedIdentity, UserAssignedIdentity,
     StorageAccountConnectionString. Known values are: "SystemAssignedIdentity",
     "UserAssignedIdentity", and "StorageAccountConnectionString".
    :vartype type: str or ~azure.mgmt.web.models.AuthenticationType
    :ivar user_assigned_identity_resource_id: Use this property for UserAssignedIdentity. Set the
     resource ID of the identity. Do not set a value for this property when using other
     authentication type.
    :vartype user_assigned_identity_resource_id: str
    :ivar storage_account_connection_string_name: Use this property for
     StorageAccountConnectionString. Set the name of the app setting that has the storage account
     connection string. Do not set a value for this property when using other authentication type.
    :vartype storage_account_connection_string_name: str
    """

    type: Optional[Union[str, "_models.AuthenticationType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Property to select authentication type to access the selected storage account. Available
     options: SystemAssignedIdentity, UserAssignedIdentity, StorageAccountConnectionString. Known
     values are: \"SystemAssignedIdentity\", \"UserAssignedIdentity\", and
     \"StorageAccountConnectionString\"."""
    user_assigned_identity_resource_id: Optional[str] = rest_field(
        name="userAssignedIdentityResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Use this property for UserAssignedIdentity. Set the resource ID of the identity. Do not set a
     value for this property when using other authentication type."""
    storage_account_connection_string_name: Optional[str] = rest_field(
        name="storageAccountConnectionStringName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Use this property for StorageAccountConnectionString. Set the name of the app setting that has
     the storage account connection string. Do not set a value for this property when using other
     authentication type."""

    @overload
    def __init__(
        self,
        *,
        type: Optional[Union[str, "_models.AuthenticationType"]] = None,
        user_assigned_identity_resource_id: Optional[str] = None,
        storage_account_connection_string_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FunctionSecrets(_Model):
    """Function secrets.

    :ivar key: Secret key.
    :vartype key: str
    :ivar trigger_url: Trigger URL.
    :vartype trigger_url: str
    """

    key: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Secret key."""
    trigger_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Trigger URL."""

    @overload
    def __init__(
        self,
        *,
        key: Optional[str] = None,
        trigger_url: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FunctionsRuntime(_Model):
    """Function app runtime name and version.

    :ivar name: Function app runtime name. Available options: dotnet-isolated, node, java,
     powershell, python, custom. Known values are: "dotnet-isolated", "node", "java", "powershell",
     "python", and "custom".
    :vartype name: str or ~azure.mgmt.web.models.RuntimeName
    :ivar version: Function app runtime version. Example: 8 (for dotnet-isolated).
    :vartype version: str
    """

    name: Optional[Union[str, "_models.RuntimeName"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Function app runtime name. Available options: dotnet-isolated, node, java, powershell, python,
     custom. Known values are: \"dotnet-isolated\", \"node\", \"java\", \"powershell\", \"python\",
     and \"custom\"."""
    version: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Function app runtime version. Example: 8 (for dotnet-isolated)."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[Union[str, "_models.RuntimeName"]] = None,
        version: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FunctionsScaleAndConcurrency(_Model):
    """Scale and concurrency settings for the function app.

    :ivar always_ready: 'Always Ready' configuration for the function app.
    :vartype always_ready: list[~azure.mgmt.web.models.FunctionsAlwaysReadyConfig]
    :ivar maximum_instance_count: The maximum number of instances for the function app.
    :vartype maximum_instance_count: int
    :ivar instance_memory_mb: Set the amount of memory allocated to each instance of the function
     app in MB. CPU and network bandwidth are allocated proportionally.
    :vartype instance_memory_mb: int
    :ivar triggers: Scale and concurrency settings for the function app triggers.
    :vartype triggers: ~azure.mgmt.web.models.FunctionsScaleAndConcurrencyTriggers
    """

    always_ready: Optional[list["_models.FunctionsAlwaysReadyConfig"]] = rest_field(
        name="alwaysReady", visibility=["read", "create", "update", "delete", "query"]
    )
    """'Always Ready' configuration for the function app."""
    maximum_instance_count: Optional[int] = rest_field(
        name="maximumInstanceCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """The maximum number of instances for the function app."""
    instance_memory_mb: Optional[int] = rest_field(
        name="instanceMemoryMB", visibility=["read", "create", "update", "delete", "query"]
    )
    """Set the amount of memory allocated to each instance of the function app in MB. CPU and network
     bandwidth are allocated proportionally."""
    triggers: Optional["_models.FunctionsScaleAndConcurrencyTriggers"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Scale and concurrency settings for the function app triggers."""

    @overload
    def __init__(
        self,
        *,
        always_ready: Optional[list["_models.FunctionsAlwaysReadyConfig"]] = None,
        maximum_instance_count: Optional[int] = None,
        instance_memory_mb: Optional[int] = None,
        triggers: Optional["_models.FunctionsScaleAndConcurrencyTriggers"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FunctionsScaleAndConcurrencyTriggers(_Model):
    """Scale and concurrency settings for the function app triggers.

    :ivar http: Scale and concurrency settings for the HTTP trigger.
    :vartype http: ~azure.mgmt.web.models.FunctionsScaleAndConcurrencyTriggersHttp
    """

    http: Optional["_models.FunctionsScaleAndConcurrencyTriggersHttp"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Scale and concurrency settings for the HTTP trigger."""

    @overload
    def __init__(
        self,
        *,
        http: Optional["_models.FunctionsScaleAndConcurrencyTriggersHttp"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FunctionsScaleAndConcurrencyTriggersHttp(_Model):
    """Scale and concurrency settings for the HTTP trigger.

    :ivar per_instance_concurrency: The maximum number of concurrent HTTP trigger invocations per
     instance.
    :vartype per_instance_concurrency: int
    """

    per_instance_concurrency: Optional[int] = rest_field(
        name="perInstanceConcurrency", visibility=["read", "create", "update", "delete", "query"]
    )
    """The maximum number of concurrent HTTP trigger invocations per instance."""

    @overload
    def __init__(
        self,
        *,
        per_instance_concurrency: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class FunctionsSiteUpdateStrategy(_Model):
    """Function app site update strategy configuration for deployments and site config updates.

    :ivar type: Function app site update strategy type. Available options: Recreate, RollingUpdate.
     Known values are: "Recreate" and "RollingUpdate".
    :vartype type: str or ~azure.mgmt.web.models.SiteUpdateStrategyType
    """

    type: Optional[Union[str, "_models.SiteUpdateStrategyType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Function app site update strategy type. Available options: Recreate, RollingUpdate. Known
     values are: \"Recreate\" and \"RollingUpdate\"."""

    @overload
    def __init__(
        self,
        *,
        type: Optional[Union[str, "_models.SiteUpdateStrategyType"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class GeoRegion(ProxyOnlyResource):
    """Geographical region.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: GeoRegion resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.GeoRegionProperties
    """

    properties: Optional["_models.GeoRegionProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """GeoRegion resource specific properties."""

    __flattened_items = ["description", "display_name", "org_domain"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.GeoRegionProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class GeoRegionProperties(_Model):
    """GeoRegion resource specific properties.

    :ivar description: Region description.
    :vartype description: str
    :ivar display_name: Display name for region.
    :vartype display_name: str
    :ivar org_domain: Display name for region.
    :vartype org_domain: str
    """

    description: Optional[str] = rest_field(visibility=["read"])
    """Region description."""
    display_name: Optional[str] = rest_field(name="displayName", visibility=["read"])
    """Display name for region."""
    org_domain: Optional[str] = rest_field(name="orgDomain", visibility=["read"])
    """Display name for region."""


class GitHub(_Model):
    """The configuration settings of the GitHub provider.

    :ivar enabled: <code>false</code> if the GitHub provider should not be enabled despite the set
     registration; otherwise, <code>true</code>.
    :vartype enabled: bool
    :ivar registration: The configuration settings of the app registration for the GitHub provider.
    :vartype registration: ~azure.mgmt.web.models.ClientRegistration
    :ivar login: The configuration settings of the login flow.
    :vartype login: ~azure.mgmt.web.models.LoginScopes
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>false</code> if the GitHub provider should not be enabled despite the set registration;
     otherwise, <code>true</code>."""
    registration: Optional["_models.ClientRegistration"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the app registration for the GitHub provider."""
    login: Optional["_models.LoginScopes"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The configuration settings of the login flow."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        registration: Optional["_models.ClientRegistration"] = None,
        login: Optional["_models.LoginScopes"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class GitHubActionCodeConfiguration(_Model):
    """The GitHub action code configuration.

    :ivar runtime_stack: Runtime stack is used to determine the workflow file content for code base
     apps.
    :vartype runtime_stack: str
    :ivar runtime_version: Runtime version is used to determine what build version to set in the
     workflow file.
    :vartype runtime_version: str
    """

    runtime_stack: Optional[str] = rest_field(
        name="runtimeStack", visibility=["read", "create", "update", "delete", "query"]
    )
    """Runtime stack is used to determine the workflow file content for code base apps."""
    runtime_version: Optional[str] = rest_field(
        name="runtimeVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Runtime version is used to determine what build version to set in the workflow file."""

    @overload
    def __init__(
        self,
        *,
        runtime_stack: Optional[str] = None,
        runtime_version: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class GitHubActionConfiguration(_Model):
    """The GitHub action configuration.

    :ivar code_configuration: GitHub Action code configuration.
    :vartype code_configuration: ~azure.mgmt.web.models.GitHubActionCodeConfiguration
    :ivar container_configuration: GitHub Action container configuration.
    :vartype container_configuration: ~azure.mgmt.web.models.GitHubActionContainerConfiguration
    :ivar is_linux: This will help determine the workflow configuration to select.
    :vartype is_linux: bool
    :ivar generate_workflow_file: Workflow option to determine whether the workflow file should be
     generated and written to the repository.
    :vartype generate_workflow_file: bool
    """

    code_configuration: Optional["_models.GitHubActionCodeConfiguration"] = rest_field(
        name="codeConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """GitHub Action code configuration."""
    container_configuration: Optional["_models.GitHubActionContainerConfiguration"] = rest_field(
        name="containerConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """GitHub Action container configuration."""
    is_linux: Optional[bool] = rest_field(name="isLinux", visibility=["read", "create", "update", "delete", "query"])
    """This will help determine the workflow configuration to select."""
    generate_workflow_file: Optional[bool] = rest_field(
        name="generateWorkflowFile", visibility=["read", "create", "update", "delete", "query"]
    )
    """Workflow option to determine whether the workflow file should be generated and written to the
     repository."""

    @overload
    def __init__(
        self,
        *,
        code_configuration: Optional["_models.GitHubActionCodeConfiguration"] = None,
        container_configuration: Optional["_models.GitHubActionContainerConfiguration"] = None,
        is_linux: Optional[bool] = None,
        generate_workflow_file: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class GitHubActionContainerConfiguration(_Model):
    """The GitHub action container configuration.

    :ivar server_url: The server URL for the container registry where the build will be hosted.
    :vartype server_url: str
    :ivar image_name: The image name for the build.
    :vartype image_name: str
    :ivar username: The username used to upload the image to the container registry.
    :vartype username: str
    :ivar password: The password used to upload the image to the container registry.
    :vartype password: str
    """

    server_url: Optional[str] = rest_field(name="serverUrl", visibility=["read", "create", "update", "delete", "query"])
    """The server URL for the container registry where the build will be hosted."""
    image_name: Optional[str] = rest_field(name="imageName", visibility=["read", "create", "update", "delete", "query"])
    """The image name for the build."""
    username: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The username used to upload the image to the container registry."""
    password: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The password used to upload the image to the container registry."""

    @overload
    def __init__(
        self,
        *,
        server_url: Optional[str] = None,
        image_name: Optional[str] = None,
        username: Optional[str] = None,
        password: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class GitHubActionWebAppStackSettings(_Model):
    """GitHub Actions Web App stack settings.

    :ivar is_supported: <code>true</code> if GitHub Actions is supported for the stack; otherwise,
     <code>false</code>.
    :vartype is_supported: bool
    :ivar supported_version: The minor version that is supported for GitHub Actions.
    :vartype supported_version: str
    """

    is_supported: Optional[bool] = rest_field(name="isSupported", visibility=["read"])
    """<code>true</code> if GitHub Actions is supported for the stack; otherwise, <code>false</code>."""
    supported_version: Optional[str] = rest_field(name="supportedVersion", visibility=["read"])
    """The minor version that is supported for GitHub Actions."""


class GlobalCsmSkuDescription(_Model):
    """A Global SKU Description.

    :ivar name: Name of the resource SKU.
    :vartype name: str
    :ivar tier: Service Tier of the resource SKU.
    :vartype tier: str
    :ivar size: Size specifier of the resource SKU.
    :vartype size: str
    :ivar family: Family code of the resource SKU.
    :vartype family: str
    :ivar capacity: Min, max, and default scale values of the SKU.
    :vartype capacity: ~azure.mgmt.web.models.SkuCapacity
    :ivar locations: Locations of the SKU.
    :vartype locations: list[str]
    :ivar capabilities: Capabilities of the SKU, e.g., is traffic manager enabled?.
    :vartype capabilities: list[~azure.mgmt.web.models.Capability]
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the resource SKU."""
    tier: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Service Tier of the resource SKU."""
    size: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Size specifier of the resource SKU."""
    family: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Family code of the resource SKU."""
    capacity: Optional["_models.SkuCapacity"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Min, max, and default scale values of the SKU."""
    locations: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Locations of the SKU."""
    capabilities: Optional[list["_models.Capability"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Capabilities of the SKU, e.g., is traffic manager enabled?."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        tier: Optional[str] = None,
        size: Optional[str] = None,
        family: Optional[str] = None,
        capacity: Optional["_models.SkuCapacity"] = None,
        locations: Optional[list[str]] = None,
        capabilities: Optional[list["_models.Capability"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class GlobalValidation(_Model):
    """The configuration settings that determines the validation flow of users using App Service
    Authentication/Authorization.

    :ivar require_authentication: <code>true</code> if the authentication flow is required any
     request is made; otherwise, <code>false</code>.
    :vartype require_authentication: bool
    :ivar unauthenticated_client_action: The action to take when an unauthenticated client attempts
     to access the app. Known values are: "RedirectToLoginPage", "AllowAnonymous", "Return401", and
     "Return403".
    :vartype unauthenticated_client_action: str or
     ~azure.mgmt.web.models.UnauthenticatedClientActionV2
    :ivar redirect_to_provider: The default authentication provider to use when multiple providers
     are configured. This setting is only needed if multiple providers are configured and the
     unauthenticated client action is set to "RedirectToLoginPage".
    :vartype redirect_to_provider: str
    :ivar excluded_paths: The paths for which unauthenticated flow would not be redirected to the
     login page.
    :vartype excluded_paths: list[str]
    """

    require_authentication: Optional[bool] = rest_field(
        name="requireAuthentication", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if the authentication flow is required any request is made; otherwise,
     <code>false</code>."""
    unauthenticated_client_action: Optional[Union[str, "_models.UnauthenticatedClientActionV2"]] = rest_field(
        name="unauthenticatedClientAction", visibility=["read", "create", "update", "delete", "query"]
    )
    """The action to take when an unauthenticated client attempts to access the app. Known values are:
     \"RedirectToLoginPage\", \"AllowAnonymous\", \"Return401\", and \"Return403\"."""
    redirect_to_provider: Optional[str] = rest_field(
        name="redirectToProvider", visibility=["read", "create", "update", "delete", "query"]
    )
    """The default authentication provider to use when multiple providers are configured. This setting
     is only needed if multiple providers are configured and the unauthenticated client action is
     set to \"RedirectToLoginPage\"."""
    excluded_paths: Optional[list[str]] = rest_field(
        name="excludedPaths", visibility=["read", "create", "update", "delete", "query"]
    )
    """The paths for which unauthenticated flow would not be redirected to the login page."""

    @overload
    def __init__(
        self,
        *,
        require_authentication: Optional[bool] = None,
        unauthenticated_client_action: Optional[Union[str, "_models.UnauthenticatedClientActionV2"]] = None,
        redirect_to_provider: Optional[str] = None,
        excluded_paths: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Google(_Model):
    """The configuration settings of the Google provider.

    :ivar enabled: <code>false</code> if the Google provider should not be enabled despite the set
     registration; otherwise, <code>true</code>.
    :vartype enabled: bool
    :ivar registration: The configuration settings of the app registration for the Google provider.
    :vartype registration: ~azure.mgmt.web.models.ClientRegistration
    :ivar login: The configuration settings of the login flow.
    :vartype login: ~azure.mgmt.web.models.LoginScopes
    :ivar validation: The configuration settings of the Azure Active Directory token validation
     flow.
    :vartype validation: ~azure.mgmt.web.models.AllowedAudiencesValidation
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>false</code> if the Google provider should not be enabled despite the set registration;
     otherwise, <code>true</code>."""
    registration: Optional["_models.ClientRegistration"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the app registration for the Google provider."""
    login: Optional["_models.LoginScopes"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The configuration settings of the login flow."""
    validation: Optional["_models.AllowedAudiencesValidation"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the Azure Active Directory token validation flow."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        registration: Optional["_models.ClientRegistration"] = None,
        login: Optional["_models.LoginScopes"] = None,
        validation: Optional["_models.AllowedAudiencesValidation"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class HandlerMapping(_Model):
    """The IIS handler mappings used to define which handler processes HTTP requests with certain
    extension. For example, it is used to configure php-cgi.exe process to handle all HTTP requests
    with *.php extension.

    :ivar extension: Requests with this extension will be handled using the specified FastCGI
     application.
    :vartype extension: str
    :ivar script_processor: The absolute path to the FastCGI application.
    :vartype script_processor: str
    :ivar arguments: Command-line arguments to be passed to the script processor.
    :vartype arguments: str
    """

    extension: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Requests with this extension will be handled using the specified FastCGI application."""
    script_processor: Optional[str] = rest_field(
        name="scriptProcessor", visibility=["read", "create", "update", "delete", "query"]
    )
    """The absolute path to the FastCGI application."""
    arguments: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Command-line arguments to be passed to the script processor."""

    @overload
    def __init__(
        self,
        *,
        extension: Optional[str] = None,
        script_processor: Optional[str] = None,
        arguments: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class HostingEnvironmentDeploymentInfo(_Model):
    """Information needed to create resources on an App Service Environment.

    :ivar name: Name of the App Service Environment.
    :vartype name: str
    :ivar location: Location of the App Service Environment.
    :vartype location: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the App Service Environment."""
    location: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Location of the App Service Environment."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        location: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class HostingEnvironmentDiagnostics(_Model):
    """Diagnostics for an App Service Environment.

    :ivar name: Name/identifier of the diagnostics.
    :vartype name: str
    :ivar diagnostics_output: Diagnostics output.
    :vartype diagnostics_output: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name/identifier of the diagnostics."""
    diagnostics_output: Optional[str] = rest_field(
        name="diagnosticsOutput", visibility=["read", "create", "update", "delete", "query"]
    )
    """Diagnostics output."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        diagnostics_output: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class HostingEnvironmentProfile(_Model):
    """Specification for an App Service Environment to use for this resource.

    :ivar id: Resource ID of the App Service Environment.
    :vartype id: str
    :ivar name: Name of the App Service Environment.
    :vartype name: str
    :ivar type: Resource type of the App Service Environment.
    :vartype type: str
    """

    id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Resource ID of the App Service Environment."""
    name: Optional[str] = rest_field(visibility=["read"])
    """Name of the App Service Environment."""
    type: Optional[str] = rest_field(visibility=["read"])
    """Resource type of the App Service Environment."""

    @overload
    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class HostKeys(_Model):
    """Functions host level keys.

    :ivar master_key: Secret key.
    :vartype master_key: str
    :ivar function_keys: Host level function keys.
    :vartype function_keys: dict[str, str]
    :ivar system_keys: System keys.
    :vartype system_keys: dict[str, str]
    """

    master_key: Optional[str] = rest_field(name="masterKey", visibility=["read", "create", "update", "delete", "query"])
    """Secret key."""
    function_keys: Optional[dict[str, str]] = rest_field(
        name="functionKeys", visibility=["read", "create", "update", "delete", "query"]
    )
    """Host level function keys."""
    system_keys: Optional[dict[str, str]] = rest_field(
        name="systemKeys", visibility=["read", "create", "update", "delete", "query"]
    )
    """System keys."""

    @overload
    def __init__(
        self,
        *,
        master_key: Optional[str] = None,
        function_keys: Optional[dict[str, str]] = None,
        system_keys: Optional[dict[str, str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class HostNameBinding(ProxyResource):
    """A hostname binding object.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: HostNameBinding resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.HostNameBindingProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.HostNameBindingProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """HostNameBinding resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "site_name",
        "domain_id",
        "azure_resource_name",
        "azure_resource_type",
        "custom_host_name_dns_record_type",
        "host_name_type",
        "ssl_state",
        "thumbprint",
        "virtual_ip",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.HostNameBindingProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class HostNameBindingProperties(_Model):
    """HostNameBinding resource specific properties.

    :ivar site_name: App Service app name.
    :vartype site_name: str
    :ivar domain_id: Fully qualified ARM domain resource URI.
    :vartype domain_id: str
    :ivar azure_resource_name: Azure resource name.
    :vartype azure_resource_name: str
    :ivar azure_resource_type: Azure resource type. Known values are: "Website" and
     "TrafficManager".
    :vartype azure_resource_type: str or ~azure.mgmt.web.models.AzureResourceType
    :ivar custom_host_name_dns_record_type: Custom DNS record type. Known values are: "CName" and
     "A".
    :vartype custom_host_name_dns_record_type: str or
     ~azure.mgmt.web.models.CustomHostNameDnsRecordType
    :ivar host_name_type: Hostname type. Known values are: "Verified" and "Managed".
    :vartype host_name_type: str or ~azure.mgmt.web.models.HostNameType
    :ivar ssl_state: SSL type. Known values are: "Disabled", "SniEnabled", and "IpBasedEnabled".
    :vartype ssl_state: str or ~azure.mgmt.web.models.SslState
    :ivar thumbprint: SSL certificate thumbprint.
    :vartype thumbprint: str
    :ivar virtual_ip: Virtual IP address assigned to the hostname if IP based SSL is enabled.
    :vartype virtual_ip: str
    """

    site_name: Optional[str] = rest_field(name="siteName", visibility=["read", "create"])
    """App Service app name."""
    domain_id: Optional[str] = rest_field(name="domainId", visibility=["read", "create"])
    """Fully qualified ARM domain resource URI."""
    azure_resource_name: Optional[str] = rest_field(name="azureResourceName", visibility=["read", "create"])
    """Azure resource name."""
    azure_resource_type: Optional[Union[str, "_models.AzureResourceType"]] = rest_field(
        name="azureResourceType", visibility=["read", "create"]
    )
    """Azure resource type. Known values are: \"Website\" and \"TrafficManager\"."""
    custom_host_name_dns_record_type: Optional[Union[str, "_models.CustomHostNameDnsRecordType"]] = rest_field(
        name="customHostNameDnsRecordType", visibility=["read", "create"]
    )
    """Custom DNS record type. Known values are: \"CName\" and \"A\"."""
    host_name_type: Optional[Union[str, "_models.HostNameType"]] = rest_field(
        name="hostNameType", visibility=["read", "create"]
    )
    """Hostname type. Known values are: \"Verified\" and \"Managed\"."""
    ssl_state: Optional[Union[str, "_models.SslState"]] = rest_field(name="sslState", visibility=["read", "create"])
    """SSL type. Known values are: \"Disabled\", \"SniEnabled\", and \"IpBasedEnabled\"."""
    thumbprint: Optional[str] = rest_field(visibility=["read", "create"])
    """SSL certificate thumbprint."""
    virtual_ip: Optional[str] = rest_field(name="virtualIP", visibility=["read"])
    """Virtual IP address assigned to the hostname if IP based SSL is enabled."""

    @overload
    def __init__(
        self,
        *,
        site_name: Optional[str] = None,
        domain_id: Optional[str] = None,
        azure_resource_name: Optional[str] = None,
        azure_resource_type: Optional[Union[str, "_models.AzureResourceType"]] = None,
        custom_host_name_dns_record_type: Optional[Union[str, "_models.CustomHostNameDnsRecordType"]] = None,
        host_name_type: Optional[Union[str, "_models.HostNameType"]] = None,
        ssl_state: Optional[Union[str, "_models.SslState"]] = None,
        thumbprint: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class HostNameSslState(_Model):
    """SSL-enabled hostname.

    :ivar name: Hostname.
    :vartype name: str
    :ivar ssl_state: SSL type. Known values are: "Disabled", "SniEnabled", and "IpBasedEnabled".
    :vartype ssl_state: str or ~azure.mgmt.web.models.SslState
    :ivar virtual_ip: Virtual IP address assigned to the hostname if IP based SSL is enabled.
    :vartype virtual_ip: str
    :ivar thumbprint: SSL certificate thumbprint.
    :vartype thumbprint: str
    :ivar to_update: Set to <code>true</code> to update existing hostname.
    :vartype to_update: bool
    :ivar host_type: Indicates whether the hostname is a standard or repository hostname. Known
     values are: "Standard" and "Repository".
    :vartype host_type: str or ~azure.mgmt.web.models.HostType
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Hostname."""
    ssl_state: Optional[Union[str, "_models.SslState"]] = rest_field(
        name="sslState", visibility=["read", "create", "update", "delete", "query"]
    )
    """SSL type. Known values are: \"Disabled\", \"SniEnabled\", and \"IpBasedEnabled\"."""
    virtual_ip: Optional[str] = rest_field(name="virtualIP", visibility=["read", "create", "update", "delete", "query"])
    """Virtual IP address assigned to the hostname if IP based SSL is enabled."""
    thumbprint: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """SSL certificate thumbprint."""
    to_update: Optional[bool] = rest_field(name="toUpdate", visibility=["read", "create", "update", "delete", "query"])
    """Set to <code>true</code> to update existing hostname."""
    host_type: Optional[Union[str, "_models.HostType"]] = rest_field(
        name="hostType", visibility=["read", "create", "update", "delete", "query"]
    )
    """Indicates whether the hostname is a standard or repository hostname. Known values are:
     \"Standard\" and \"Repository\"."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        ssl_state: Optional[Union[str, "_models.SslState"]] = None,
        virtual_ip: Optional[str] = None,
        thumbprint: Optional[str] = None,
        to_update: Optional[bool] = None,
        host_type: Optional[Union[str, "_models.HostType"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class HttpLogsConfig(_Model):
    """Http logs configuration.

    :ivar file_system: Http logs to file system configuration.
    :vartype file_system: ~azure.mgmt.web.models.FileSystemHttpLogsConfig
    :ivar azure_blob_storage: Http logs to azure blob storage configuration.
    :vartype azure_blob_storage: ~azure.mgmt.web.models.AzureBlobStorageHttpLogsConfig
    """

    file_system: Optional["_models.FileSystemHttpLogsConfig"] = rest_field(
        name="fileSystem", visibility=["read", "create", "update", "delete", "query"]
    )
    """Http logs to file system configuration."""
    azure_blob_storage: Optional["_models.AzureBlobStorageHttpLogsConfig"] = rest_field(
        name="azureBlobStorage", visibility=["read", "create", "update", "delete", "query"]
    )
    """Http logs to azure blob storage configuration."""

    @overload
    def __init__(
        self,
        *,
        file_system: Optional["_models.FileSystemHttpLogsConfig"] = None,
        azure_blob_storage: Optional["_models.AzureBlobStorageHttpLogsConfig"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class HttpSettings(_Model):
    """The configuration settings of the HTTP requests for authentication and authorization requests
    made against App Service Authentication/Authorization.

    :ivar require_https: <code>false</code> if the authentication/authorization responses not
     having the HTTPS scheme are permissible; otherwise, <code>true</code>.
    :vartype require_https: bool
    :ivar routes: The configuration settings of the paths HTTP requests.
    :vartype routes: ~azure.mgmt.web.models.HttpSettingsRoutes
    :ivar forward_proxy: The configuration settings of a forward proxy used to make the requests.
    :vartype forward_proxy: ~azure.mgmt.web.models.ForwardProxy
    """

    require_https: Optional[bool] = rest_field(
        name="requireHttps", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>false</code> if the authentication/authorization responses not having the HTTPS scheme
     are permissible; otherwise, <code>true</code>."""
    routes: Optional["_models.HttpSettingsRoutes"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the paths HTTP requests."""
    forward_proxy: Optional["_models.ForwardProxy"] = rest_field(
        name="forwardProxy", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of a forward proxy used to make the requests."""

    @overload
    def __init__(
        self,
        *,
        require_https: Optional[bool] = None,
        routes: Optional["_models.HttpSettingsRoutes"] = None,
        forward_proxy: Optional["_models.ForwardProxy"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class HttpSettingsRoutes(_Model):
    """The configuration settings of the paths HTTP requests.

    :ivar api_prefix: The prefix that should precede all the authentication/authorization paths.
    :vartype api_prefix: str
    """

    api_prefix: Optional[str] = rest_field(name="apiPrefix", visibility=["read", "create", "update", "delete", "query"])
    """The prefix that should precede all the authentication/authorization paths."""

    @overload
    def __init__(
        self,
        *,
        api_prefix: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class HybridConnection(ProxyResource):
    """Hybrid Connection contract. This is used to configure a Hybrid Connection.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: HybridConnection resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.HybridConnectionProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.HybridConnectionProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """HybridConnection resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "service_bus_namespace",
        "relay_name",
        "relay_arm_uri",
        "hostname",
        "port",
        "send_key_name",
        "send_key_value",
        "service_bus_suffix",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.HybridConnectionProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class HybridConnectionKey(ProxyOnlyResource):
    """Hybrid Connection key contract. This has the send key name and value for a Hybrid Connection.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: HybridConnectionKey resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.HybridConnectionKeyProperties
    """

    properties: Optional["_models.HybridConnectionKeyProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """HybridConnectionKey resource specific properties."""

    __flattened_items = ["send_key_name", "send_key_value"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.HybridConnectionKeyProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class HybridConnectionKeyProperties(_Model):
    """HybridConnectionKey resource specific properties.

    :ivar send_key_name: The name of the send key.
    :vartype send_key_name: str
    :ivar send_key_value: The value of the send key.
    :vartype send_key_value: str
    """

    send_key_name: Optional[str] = rest_field(name="sendKeyName", visibility=["read"])
    """The name of the send key."""
    send_key_value: Optional[str] = rest_field(name="sendKeyValue", visibility=["read"])
    """The value of the send key."""


class HybridConnectionLimits(ProxyResource):
    """Hybrid Connection limits contract. This is used to return the plan limits of Hybrid
    Connections.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: HybridConnectionLimits resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.HybridConnectionLimitsProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.HybridConnectionLimitsProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """HybridConnectionLimits resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["current", "maximum"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.HybridConnectionLimitsProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class HybridConnectionLimitsProperties(_Model):
    """HybridConnectionLimits resource specific properties.

    :ivar current: The current number of Hybrid Connections.
    :vartype current: int
    :ivar maximum: The maximum number of Hybrid Connections allowed.
    :vartype maximum: int
    """

    current: Optional[int] = rest_field(visibility=["read"])
    """The current number of Hybrid Connections."""
    maximum: Optional[int] = rest_field(visibility=["read"])
    """The maximum number of Hybrid Connections allowed."""


class HybridConnectionProperties(_Model):
    """HybridConnection resource specific properties.

    :ivar service_bus_namespace: The name of the Service Bus namespace.
    :vartype service_bus_namespace: str
    :ivar relay_name: The name of the Service Bus relay.
    :vartype relay_name: str
    :ivar relay_arm_uri: The ARM URI to the Service Bus relay.
    :vartype relay_arm_uri: str
    :ivar hostname: The hostname of the endpoint.
    :vartype hostname: str
    :ivar port: The port of the endpoint.
    :vartype port: int
    :ivar send_key_name: The name of the Service Bus key which has Send permissions. This is used
     to authenticate to Service Bus.
    :vartype send_key_name: str
    :ivar send_key_value: The value of the Service Bus key. This is used to authenticate to Service
     Bus. In ARM this key will not be returned normally, use the POST /listKeys API instead.
    :vartype send_key_value: str
    :ivar service_bus_suffix: The suffix for the service bus endpoint. By default this is
     .servicebus.windows.net.
    :vartype service_bus_suffix: str
    """

    service_bus_namespace: Optional[str] = rest_field(name="serviceBusNamespace", visibility=["read", "create"])
    """The name of the Service Bus namespace."""
    relay_name: Optional[str] = rest_field(name="relayName", visibility=["read", "create"])
    """The name of the Service Bus relay."""
    relay_arm_uri: Optional[str] = rest_field(
        name="relayArmUri", visibility=["read", "create", "update", "delete", "query"]
    )
    """The ARM URI to the Service Bus relay."""
    hostname: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The hostname of the endpoint."""
    port: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The port of the endpoint."""
    send_key_name: Optional[str] = rest_field(
        name="sendKeyName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The name of the Service Bus key which has Send permissions. This is used to authenticate to
     Service Bus."""
    send_key_value: Optional[str] = rest_field(
        name="sendKeyValue", visibility=["read", "create", "update", "delete", "query"]
    )
    """The value of the Service Bus key. This is used to authenticate to Service Bus. In ARM this key
     will not be returned normally, use the POST /listKeys API instead."""
    service_bus_suffix: Optional[str] = rest_field(
        name="serviceBusSuffix", visibility=["read", "create", "update", "delete", "query"]
    )
    """The suffix for the service bus endpoint. By default this is .servicebus.windows.net."""

    @overload
    def __init__(
        self,
        *,
        service_bus_namespace: Optional[str] = None,
        relay_name: Optional[str] = None,
        relay_arm_uri: Optional[str] = None,
        hostname: Optional[str] = None,
        port: Optional[int] = None,
        send_key_name: Optional[str] = None,
        send_key_value: Optional[str] = None,
        service_bus_suffix: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Identifier(ProxyResource):
    """A domain specific resource identifier.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: Identifier resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.IdentifierProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.IdentifierProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Identifier resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["value"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.IdentifierProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class IdentifierProperties(_Model):
    """Identifier resource specific properties.

    :ivar value: String representation of the identity.
    :vartype value: str
    """

    value: Optional[str] = rest_field(name="id", visibility=["read", "create", "update", "delete", "query"])
    """String representation of the identity."""

    @overload
    def __init__(
        self,
        *,
        value: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class IdentityProviders(_Model):
    """The configuration settings of each of the identity providers used to configure App Service
    Authentication/Authorization.

    :ivar azure_active_directory: The configuration settings of the Azure Active directory
     provider.
    :vartype azure_active_directory: ~azure.mgmt.web.models.AzureActiveDirectory
    :ivar facebook: The configuration settings of the Facebook provider.
    :vartype facebook: ~azure.mgmt.web.models.Facebook
    :ivar git_hub: The configuration settings of the GitHub provider.
    :vartype git_hub: ~azure.mgmt.web.models.GitHub
    :ivar google: The configuration settings of the Google provider.
    :vartype google: ~azure.mgmt.web.models.Google
    :ivar legacy_microsoft_account: The configuration settings of the legacy Microsoft Account
     provider.
    :vartype legacy_microsoft_account: ~azure.mgmt.web.models.LegacyMicrosoftAccount
    :ivar twitter: The configuration settings of the Twitter provider.
    :vartype twitter: ~azure.mgmt.web.models.Twitter
    :ivar apple: The configuration settings of the Apple provider.
    :vartype apple: ~azure.mgmt.web.models.Apple
    :ivar azure_static_web_apps: The configuration settings of the Azure Static Web Apps provider.
    :vartype azure_static_web_apps: ~azure.mgmt.web.models.AzureStaticWebApps
    :ivar custom_open_id_connect_providers: The map of the name of the alias of each custom Open ID
     Connect provider to the configuration settings of the custom Open ID Connect provider.
    :vartype custom_open_id_connect_providers: dict[str,
     ~azure.mgmt.web.models.CustomOpenIdConnectProvider]
    """

    azure_active_directory: Optional["_models.AzureActiveDirectory"] = rest_field(
        name="azureActiveDirectory", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the Azure Active directory provider."""
    facebook: Optional["_models.Facebook"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The configuration settings of the Facebook provider."""
    git_hub: Optional["_models.GitHub"] = rest_field(
        name="gitHub", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the GitHub provider."""
    google: Optional["_models.Google"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The configuration settings of the Google provider."""
    legacy_microsoft_account: Optional["_models.LegacyMicrosoftAccount"] = rest_field(
        name="legacyMicrosoftAccount", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the legacy Microsoft Account provider."""
    twitter: Optional["_models.Twitter"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The configuration settings of the Twitter provider."""
    apple: Optional["_models.Apple"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The configuration settings of the Apple provider."""
    azure_static_web_apps: Optional["_models.AzureStaticWebApps"] = rest_field(
        name="azureStaticWebApps", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the Azure Static Web Apps provider."""
    custom_open_id_connect_providers: Optional[dict[str, "_models.CustomOpenIdConnectProvider"]] = rest_field(
        name="customOpenIdConnectProviders", visibility=["read", "create", "update", "delete", "query"]
    )
    """The map of the name of the alias of each custom Open ID Connect provider to the configuration
     settings of the custom Open ID Connect provider."""

    @overload
    def __init__(
        self,
        *,
        azure_active_directory: Optional["_models.AzureActiveDirectory"] = None,
        facebook: Optional["_models.Facebook"] = None,
        git_hub: Optional["_models.GitHub"] = None,
        google: Optional["_models.Google"] = None,
        legacy_microsoft_account: Optional["_models.LegacyMicrosoftAccount"] = None,
        twitter: Optional["_models.Twitter"] = None,
        apple: Optional["_models.Apple"] = None,
        azure_static_web_apps: Optional["_models.AzureStaticWebApps"] = None,
        custom_open_id_connect_providers: Optional[dict[str, "_models.CustomOpenIdConnectProvider"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class InboundEnvironmentEndpoint(_Model):
    """The IP Addresses and Ports that require inbound network access to and within the subnet of the
    App Service Environment.

    :ivar description: Short text describing the purpose of the network traffic.
    :vartype description: str
    :ivar endpoints: The IP addresses that network traffic will originate from in cidr notation.
    :vartype endpoints: list[str]
    :ivar ports: The ports that network traffic will arrive to the App Service Environment at.
    :vartype ports: list[str]
    """

    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Short text describing the purpose of the network traffic."""
    endpoints: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The IP addresses that network traffic will originate from in cidr notation."""
    ports: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The ports that network traffic will arrive to the App Service Environment at."""

    @overload
    def __init__(
        self,
        *,
        description: Optional[str] = None,
        endpoints: Optional[list[str]] = None,
        ports: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class InstallScript(_Model):
    """Server farm install script configuration.

    :ivar name: Name of the install script.
    :vartype name: str
    :ivar source: Source of the install script.
    :vartype source: ~azure.mgmt.web.models.InstallScriptSource
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the install script."""
    source: Optional["_models.InstallScriptSource"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Source of the install script."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        source: Optional["_models.InstallScriptSource"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class InstallScriptSource(_Model):
    """Object to hold install script reference.

    :ivar source_uri: Install script source URI where the install script file will be fetched from.
    :vartype source_uri: str
    :ivar type: Type of the install script. Known values are: "RemoteAzureBlob" and
     "PlatformStorage".
    :vartype type: str or ~azure.mgmt.web.models.InstallScriptType
    """

    source_uri: Optional[str] = rest_field(name="sourceUri", visibility=["read", "create", "update", "delete", "query"])
    """Install script source URI where the install script file will be fetched from."""
    type: Optional[Union[str, "_models.InstallScriptType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Type of the install script. Known values are: \"RemoteAzureBlob\" and \"PlatformStorage\"."""

    @overload
    def __init__(
        self,
        *,
        source_uri: Optional[str] = None,
        type: Optional[Union[str, "_models.InstallScriptType"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class IpAddress(_Model):
    """The ip address.

    :ivar address: The address.
    :vartype address: str
    """

    address: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The address."""

    @overload
    def __init__(
        self,
        *,
        address: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class IpAddressRange(_Model):
    """The ip address range.

    :ivar address_range: The IP address range.
    :vartype address_range: str
    """

    address_range: Optional[str] = rest_field(
        name="addressRange", visibility=["read", "create", "update", "delete", "query"]
    )
    """The IP address range."""

    @overload
    def __init__(
        self,
        *,
        address_range: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class IpSecurityRestriction(_Model):
    """IP security restriction on an app.

    :ivar ip_address: IP address the security restriction is valid for. It can be in form of pure
     ipv4 address (required SubnetMask property) or CIDR notation such as ipv4/mask (leading bit
     match). For CIDR, SubnetMask property must not be specified.
    :vartype ip_address: str
    :ivar subnet_mask: Subnet mask for the range of IP addresses the restriction is valid for.
    :vartype subnet_mask: str
    :ivar vnet_subnet_resource_id: Virtual network resource id.
    :vartype vnet_subnet_resource_id: str
    :ivar vnet_traffic_tag: (internal) Vnet traffic tag.
    :vartype vnet_traffic_tag: int
    :ivar subnet_traffic_tag: (internal) Subnet traffic tag.
    :vartype subnet_traffic_tag: int
    :ivar action: Allow or Deny access for this IP range.
    :vartype action: str
    :ivar tag: Defines what this IP filter will be used for. This is to support IP filtering on
     proxies. Known values are: "Default", "XffProxy", and "ServiceTag".
    :vartype tag: str or ~azure.mgmt.web.models.IpFilterTag
    :ivar priority: Priority of IP restriction rule.
    :vartype priority: int
    :ivar name: IP restriction rule name.
    :vartype name: str
    :ivar description: IP restriction rule description.
    :vartype description: str
    :ivar headers: IP restriction rule headers. X-Forwarded-Host
     (`https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host#Examples
     <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host#Examples>`_). The
     matching logic is ..

     * If the property is null or empty (default), all hosts(or lack of) are allowed.
     * A value is compared using ordinal-ignore-case (excluding port number).
     * Subdomain wildcards are permitted but don't match the root domain. For example,
       *.contoso.com matches the subdomain foo.contoso.com
     but not the root domain contoso.com or multi-level foo.bar.contoso.com
     * Unicode host names are allowed but are converted to Punycode for matching.

     X-Forwarded-For
     (`https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For#Examples
     <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For#Examples>`_).
     The matching logic is ..

     * If the property is null or empty (default), any forwarded-for chains (or lack of) are
       allowed.
     * If any address (excluding port number) in the chain (comma separated) matches the CIDR
       defined by the property.

     X-Azure-FDID and X-FD-HealthProbe.
     The matching logic is exact match.
    :vartype headers: dict[str, list[str]]
    """

    ip_address: Optional[str] = rest_field(name="ipAddress", visibility=["read", "create", "update", "delete", "query"])
    """IP address the security restriction is valid for. It can be in form of pure ipv4 address
     (required SubnetMask property) or CIDR notation such as ipv4/mask (leading bit match). For
     CIDR, SubnetMask property must not be specified."""
    subnet_mask: Optional[str] = rest_field(
        name="subnetMask", visibility=["read", "create", "update", "delete", "query"]
    )
    """Subnet mask for the range of IP addresses the restriction is valid for."""
    vnet_subnet_resource_id: Optional[str] = rest_field(
        name="vnetSubnetResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Virtual network resource id."""
    vnet_traffic_tag: Optional[int] = rest_field(
        name="vnetTrafficTag", visibility=["read", "create", "update", "delete", "query"]
    )
    """(internal) Vnet traffic tag."""
    subnet_traffic_tag: Optional[int] = rest_field(
        name="subnetTrafficTag", visibility=["read", "create", "update", "delete", "query"]
    )
    """(internal) Subnet traffic tag."""
    action: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Allow or Deny access for this IP range."""
    tag: Optional[Union[str, "_models.IpFilterTag"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Defines what this IP filter will be used for. This is to support IP filtering on proxies. Known
     values are: \"Default\", \"XffProxy\", and \"ServiceTag\"."""
    priority: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Priority of IP restriction rule."""
    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """IP restriction rule name."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """IP restriction rule description."""
    headers: Optional[dict[str, list[str]]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """IP restriction rule headers. X-Forwarded-Host
      (`https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host#Examples
      <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host#Examples>`_). The
      matching logic is ..
 
      * If the property is null or empty (default), all hosts(or lack of) are allowed.
      * A value is compared using ordinal-ignore-case (excluding port number).
      * Subdomain wildcards are permitted but don't match the root domain. For example,
        *.contoso.com matches the subdomain foo.contoso.com
      but not the root domain contoso.com or multi-level foo.bar.contoso.com
      * Unicode host names are allowed but are converted to Punycode for matching.
 
      X-Forwarded-For
      (`https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For#Examples
      <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For#Examples>`_).
      The matching logic is ..
 
      * If the property is null or empty (default), any forwarded-for chains (or lack of) are
        allowed.
      * If any address (excluding port number) in the chain (comma separated) matches the CIDR
        defined by the property.
 
      X-Azure-FDID and X-FD-HealthProbe.
      The matching logic is exact match."""

    @overload
    def __init__(
        self,
        *,
        ip_address: Optional[str] = None,
        subnet_mask: Optional[str] = None,
        vnet_subnet_resource_id: Optional[str] = None,
        vnet_traffic_tag: Optional[int] = None,
        subnet_traffic_tag: Optional[int] = None,
        action: Optional[str] = None,
        tag: Optional[Union[str, "_models.IpFilterTag"]] = None,
        priority: Optional[int] = None,
        name: Optional[str] = None,
        description: Optional[str] = None,
        headers: Optional[dict[str, list[str]]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class JsonSchema(_Model):
    """The JSON schema.

    :ivar title: The JSON title.
    :vartype title: str
    :ivar content: The JSON content.
    :vartype content: str
    """

    title: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The JSON title."""
    content: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The JSON content."""

    @overload
    def __init__(
        self,
        *,
        title: Optional[str] = None,
        content: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class JwtClaimChecks(_Model):
    """The configuration settings of the checks that should be made while validating the JWT Claims.

    :ivar allowed_groups: The list of the allowed groups.
    :vartype allowed_groups: list[str]
    :ivar allowed_client_applications: The list of the allowed client applications.
    :vartype allowed_client_applications: list[str]
    """

    allowed_groups: Optional[list[str]] = rest_field(
        name="allowedGroups", visibility=["read", "create", "update", "delete", "query"]
    )
    """The list of the allowed groups."""
    allowed_client_applications: Optional[list[str]] = rest_field(
        name="allowedClientApplications", visibility=["read", "create", "update", "delete", "query"]
    )
    """The list of the allowed client applications."""

    @overload
    def __init__(
        self,
        *,
        allowed_groups: Optional[list[str]] = None,
        allowed_client_applications: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class KeyInfo(_Model):
    """Function key info.

    :ivar name: Key name.
    :vartype name: str
    :ivar value: Key value.
    :vartype value: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Key name."""
    value: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Key value."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        value: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class KeyValuePairStringObject(_Model):
    """KeyValuePairStringObject.

    :ivar key:
    :vartype key: str
    :ivar value: Any object.
    :vartype value: any
    """

    key: Optional[str] = rest_field(visibility=["read"])
    value: Optional[Any] = rest_field(visibility=["read"])
    """Any object."""


class KeyVaultReferenceWithStatus(_Model):
    """Object to hold key vault reference and the resolution status.

    :ivar secret_uri: Key vault secret URI.
    :vartype secret_uri: str
    :ivar reference_status: Reference status of the key vault secret.
    :vartype reference_status: str
    """

    secret_uri: Optional[str] = rest_field(name="secretUri", visibility=["read", "create", "update", "delete", "query"])
    """Key vault secret URI."""
    reference_status: Optional[str] = rest_field(
        name="referenceStatus", visibility=["read", "create", "update", "delete", "query"]
    )
    """Reference status of the key vault secret."""

    @overload
    def __init__(
        self,
        *,
        secret_uri: Optional[str] = None,
        reference_status: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class KubeEnvironment(TrackedResource):
    """A Kubernetes cluster specialized for web workloads by Azure App Service.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: KubeEnvironment resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.KubeEnvironmentProperties
    :ivar extended_location: Extended Location.
    :vartype extended_location: ~azure.mgmt.web.models.ExtendedLocation
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.KubeEnvironmentProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """KubeEnvironment resource specific properties."""
    extended_location: Optional["_models.ExtendedLocation"] = rest_field(
        name="extendedLocation", visibility=["read", "create", "update", "delete", "query"]
    )
    """Extended Location."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "provisioning_state",
        "deployment_errors",
        "internal_load_balancer_enabled",
        "default_domain",
        "static_ip",
        "environment_type",
        "arc_configuration",
        "app_logs_configuration",
        "container_apps_configuration",
        "aks_resource_id",
    ]

    @overload
    def __init__(
        self,
        *,
        location: str,
        tags: Optional[dict[str, str]] = None,
        properties: Optional["_models.KubeEnvironmentProperties"] = None,
        extended_location: Optional["_models.ExtendedLocation"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class KubeEnvironmentPatchResource(ProxyOnlyResource):
    """ARM resource for a KubeEnvironment when patching.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: KubeEnvironmentPatchResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.KubeEnvironmentPatchResourceProperties
    """

    properties: Optional["_models.KubeEnvironmentPatchResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """KubeEnvironmentPatchResource resource specific properties."""

    __flattened_items = [
        "provisioning_state",
        "deployment_errors",
        "internal_load_balancer_enabled",
        "default_domain",
        "static_ip",
        "arc_configuration",
        "app_logs_configuration",
        "container_apps_configuration",
        "aks_resource_id",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.KubeEnvironmentPatchResourceProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class KubeEnvironmentPatchResourceProperties(_Model):
    """KubeEnvironmentPatchResource resource specific properties.

    :ivar provisioning_state: Provisioning state of the Kubernetes Environment. Known values are:
     "Succeeded", "Failed", "Canceled", "Waiting", "InitializationInProgress",
     "InfrastructureSetupInProgress", "InfrastructureSetupComplete", "ScheduledForDelete",
     "UpgradeRequested", and "UpgradeFailed".
    :vartype provisioning_state: str or ~azure.mgmt.web.models.KubeEnvironmentProvisioningState
    :ivar deployment_errors: Any errors that occurred during deployment or deployment validation.
    :vartype deployment_errors: str
    :ivar internal_load_balancer_enabled: Only visible within Vnet/Subnet.
    :vartype internal_load_balancer_enabled: bool
    :ivar default_domain: Default Domain Name for the cluster.
    :vartype default_domain: str
    :ivar static_ip: Static IP of the KubeEnvironment.
    :vartype static_ip: str
    :ivar arc_configuration: Cluster configuration which determines the ARC cluster components
     types. Eg: Choosing between BuildService kind, FrontEnd Service ArtifactsStorageType etc.
    :vartype arc_configuration: ~azure.mgmt.web.models.ArcConfiguration
    :ivar app_logs_configuration: Cluster configuration which enables the log daemon to export app
     logs to a destination. Currently only "log-analytics" is supported.
    :vartype app_logs_configuration: ~azure.mgmt.web.models.AppLogsConfiguration
    :ivar container_apps_configuration: Cluster configuration for Container Apps Environments to
     configure Dapr Instrumentation Key and VNET Configuration.
    :vartype container_apps_configuration: ~azure.mgmt.web.models.ContainerAppsConfiguration
    :ivar aks_resource_id:
    :vartype aks_resource_id: str
    """

    provisioning_state: Optional[Union[str, "_models.KubeEnvironmentProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read"]
    )
    """Provisioning state of the Kubernetes Environment. Known values are: \"Succeeded\", \"Failed\",
     \"Canceled\", \"Waiting\", \"InitializationInProgress\", \"InfrastructureSetupInProgress\",
     \"InfrastructureSetupComplete\", \"ScheduledForDelete\", \"UpgradeRequested\", and
     \"UpgradeFailed\"."""
    deployment_errors: Optional[str] = rest_field(name="deploymentErrors", visibility=["read"])
    """Any errors that occurred during deployment or deployment validation."""
    internal_load_balancer_enabled: Optional[bool] = rest_field(
        name="internalLoadBalancerEnabled", visibility=["read", "create"]
    )
    """Only visible within Vnet/Subnet."""
    default_domain: Optional[str] = rest_field(name="defaultDomain", visibility=["read"])
    """Default Domain Name for the cluster."""
    static_ip: Optional[str] = rest_field(name="staticIp", visibility=["read", "create"])
    """Static IP of the KubeEnvironment."""
    arc_configuration: Optional["_models.ArcConfiguration"] = rest_field(
        name="arcConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """Cluster configuration which determines the ARC cluster components types. Eg: Choosing between
     BuildService kind, FrontEnd Service ArtifactsStorageType etc."""
    app_logs_configuration: Optional["_models.AppLogsConfiguration"] = rest_field(
        name="appLogsConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """Cluster configuration which enables the log daemon to export app logs to a destination.
     Currently only \"log-analytics\" is supported."""
    container_apps_configuration: Optional["_models.ContainerAppsConfiguration"] = rest_field(
        name="containerAppsConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """Cluster configuration for Container Apps Environments to configure Dapr Instrumentation Key and
     VNET Configuration."""
    aks_resource_id: Optional[str] = rest_field(name="aksResourceID", visibility=["read", "create"])

    @overload
    def __init__(
        self,
        *,
        internal_load_balancer_enabled: Optional[bool] = None,
        static_ip: Optional[str] = None,
        arc_configuration: Optional["_models.ArcConfiguration"] = None,
        app_logs_configuration: Optional["_models.AppLogsConfiguration"] = None,
        container_apps_configuration: Optional["_models.ContainerAppsConfiguration"] = None,
        aks_resource_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class KubeEnvironmentProfile(_Model):
    """Specification for a Kubernetes Environment to use for this resource.

    :ivar id: Resource ID of the Kubernetes Environment.
    :vartype id: str
    :ivar name: Name of the Kubernetes Environment.
    :vartype name: str
    :ivar type: Resource type of the Kubernetes Environment.
    :vartype type: str
    """

    id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Resource ID of the Kubernetes Environment."""
    name: Optional[str] = rest_field(visibility=["read"])
    """Name of the Kubernetes Environment."""
    type: Optional[str] = rest_field(visibility=["read"])
    """Resource type of the Kubernetes Environment."""

    @overload
    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class KubeEnvironmentProperties(_Model):
    """KubeEnvironment resource specific properties.

    :ivar provisioning_state: Provisioning state of the Kubernetes Environment. Known values are:
     "Succeeded", "Failed", "Canceled", "Waiting", "InitializationInProgress",
     "InfrastructureSetupInProgress", "InfrastructureSetupComplete", "ScheduledForDelete",
     "UpgradeRequested", and "UpgradeFailed".
    :vartype provisioning_state: str or ~azure.mgmt.web.models.KubeEnvironmentProvisioningState
    :ivar deployment_errors: Any errors that occurred during deployment or deployment validation.
    :vartype deployment_errors: str
    :ivar internal_load_balancer_enabled: Only visible within Vnet/Subnet.
    :vartype internal_load_balancer_enabled: bool
    :ivar default_domain: Default Domain Name for the cluster.
    :vartype default_domain: str
    :ivar static_ip: Static IP of the KubeEnvironment.
    :vartype static_ip: str
    :ivar environment_type: Type of Kubernetes Environment. Only supported for Container App
     Environments with value as Managed.
    :vartype environment_type: str
    :ivar arc_configuration: Cluster configuration which determines the ARC cluster components
     types. Eg: Choosing between BuildService kind, FrontEnd Service ArtifactsStorageType etc.
    :vartype arc_configuration: ~azure.mgmt.web.models.ArcConfiguration
    :ivar app_logs_configuration: Cluster configuration which enables the log daemon to export app
     logs to a destination. Currently only "log-analytics" is supported.
    :vartype app_logs_configuration: ~azure.mgmt.web.models.AppLogsConfiguration
    :ivar container_apps_configuration: Cluster configuration for Container Apps Environments to
     configure Dapr Instrumentation Key and VNET Configuration.
    :vartype container_apps_configuration: ~azure.mgmt.web.models.ContainerAppsConfiguration
    :ivar aks_resource_id:
    :vartype aks_resource_id: str
    """

    provisioning_state: Optional[Union[str, "_models.KubeEnvironmentProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read"]
    )
    """Provisioning state of the Kubernetes Environment. Known values are: \"Succeeded\", \"Failed\",
     \"Canceled\", \"Waiting\", \"InitializationInProgress\", \"InfrastructureSetupInProgress\",
     \"InfrastructureSetupComplete\", \"ScheduledForDelete\", \"UpgradeRequested\", and
     \"UpgradeFailed\"."""
    deployment_errors: Optional[str] = rest_field(name="deploymentErrors", visibility=["read"])
    """Any errors that occurred during deployment or deployment validation."""
    internal_load_balancer_enabled: Optional[bool] = rest_field(
        name="internalLoadBalancerEnabled", visibility=["read", "create"]
    )
    """Only visible within Vnet/Subnet."""
    default_domain: Optional[str] = rest_field(name="defaultDomain", visibility=["read"])
    """Default Domain Name for the cluster."""
    static_ip: Optional[str] = rest_field(name="staticIp", visibility=["read", "create"])
    """Static IP of the KubeEnvironment."""
    environment_type: Optional[str] = rest_field(name="environmentType", visibility=["read", "create"])
    """Type of Kubernetes Environment. Only supported for Container App Environments with value as
     Managed."""
    arc_configuration: Optional["_models.ArcConfiguration"] = rest_field(
        name="arcConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """Cluster configuration which determines the ARC cluster components types. Eg: Choosing between
     BuildService kind, FrontEnd Service ArtifactsStorageType etc."""
    app_logs_configuration: Optional["_models.AppLogsConfiguration"] = rest_field(
        name="appLogsConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """Cluster configuration which enables the log daemon to export app logs to a destination.
     Currently only \"log-analytics\" is supported."""
    container_apps_configuration: Optional["_models.ContainerAppsConfiguration"] = rest_field(
        name="containerAppsConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """Cluster configuration for Container Apps Environments to configure Dapr Instrumentation Key and
     VNET Configuration."""
    aks_resource_id: Optional[str] = rest_field(name="aksResourceID", visibility=["read", "create"])

    @overload
    def __init__(
        self,
        *,
        internal_load_balancer_enabled: Optional[bool] = None,
        static_ip: Optional[str] = None,
        environment_type: Optional[str] = None,
        arc_configuration: Optional["_models.ArcConfiguration"] = None,
        app_logs_configuration: Optional["_models.AppLogsConfiguration"] = None,
        container_apps_configuration: Optional["_models.ContainerAppsConfiguration"] = None,
        aks_resource_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class LegacyMicrosoftAccount(_Model):
    """The configuration settings of the legacy Microsoft Account provider.

    :ivar enabled: <code>false</code> if the legacy Microsoft Account provider should not be
     enabled despite the set registration; otherwise, <code>true</code>.
    :vartype enabled: bool
    :ivar registration: The configuration settings of the app registration for the legacy Microsoft
     Account provider.
    :vartype registration: ~azure.mgmt.web.models.ClientRegistration
    :ivar login: The configuration settings of the login flow.
    :vartype login: ~azure.mgmt.web.models.LoginScopes
    :ivar validation: The configuration settings of the legacy Microsoft Account provider token
     validation flow.
    :vartype validation: ~azure.mgmt.web.models.AllowedAudiencesValidation
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>false</code> if the legacy Microsoft Account provider should not be enabled despite the
     set registration; otherwise, <code>true</code>."""
    registration: Optional["_models.ClientRegistration"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the app registration for the legacy Microsoft Account provider."""
    login: Optional["_models.LoginScopes"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The configuration settings of the login flow."""
    validation: Optional["_models.AllowedAudiencesValidation"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the legacy Microsoft Account provider token validation flow."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        registration: Optional["_models.ClientRegistration"] = None,
        login: Optional["_models.LoginScopes"] = None,
        validation: Optional["_models.AllowedAudiencesValidation"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class LinuxJavaContainerSettings(_Model):
    """Linux Java Container settings.

    :ivar java11_runtime: Java 11 version (runtime only).
    :vartype java11_runtime: str
    :ivar java8_runtime: Java 8 version (runtime only).
    :vartype java8_runtime: str
    :ivar is_preview: <code>true</code> if the stack is in preview; otherwise, <code>false</code>.
    :vartype is_preview: bool
    :ivar is_deprecated: <code>true</code> if the stack is deprecated; otherwise,
     <code>false</code>.
    :vartype is_deprecated: bool
    :ivar is_hidden: <code>true</code> if the stack should be hidden; otherwise,
     <code>false</code>.
    :vartype is_hidden: bool
    :ivar end_of_life_date: End-of-life date for the minor version.
    :vartype end_of_life_date: ~datetime.datetime
    :ivar is_auto_update: <code>true</code> if the stack version is auto-updated; otherwise,
     <code>false</code>.
    :vartype is_auto_update: bool
    :ivar is_early_access: <code>true</code> if the minor version is early-access; otherwise,
     <code>false</code>.
    :vartype is_early_access: bool
    """

    java11_runtime: Optional[str] = rest_field(name="java11Runtime", visibility=["read"])
    """Java 11 version (runtime only)."""
    java8_runtime: Optional[str] = rest_field(name="java8Runtime", visibility=["read"])
    """Java 8 version (runtime only)."""
    is_preview: Optional[bool] = rest_field(name="isPreview", visibility=["read"])
    """<code>true</code> if the stack is in preview; otherwise, <code>false</code>."""
    is_deprecated: Optional[bool] = rest_field(name="isDeprecated", visibility=["read"])
    """<code>true</code> if the stack is deprecated; otherwise, <code>false</code>."""
    is_hidden: Optional[bool] = rest_field(name="isHidden", visibility=["read"])
    """<code>true</code> if the stack should be hidden; otherwise, <code>false</code>."""
    end_of_life_date: Optional[datetime.datetime] = rest_field(
        name="endOfLifeDate", visibility=["read"], format="rfc3339"
    )
    """End-of-life date for the minor version."""
    is_auto_update: Optional[bool] = rest_field(name="isAutoUpdate", visibility=["read"])
    """<code>true</code> if the stack version is auto-updated; otherwise, <code>false</code>."""
    is_early_access: Optional[bool] = rest_field(name="isEarlyAccess", visibility=["read"])
    """<code>true</code> if the minor version is early-access; otherwise, <code>false</code>."""


class LocalizableString(_Model):
    """Localizable string object containing the name and a localized value.

    :ivar value: Non-localized name.
    :vartype value: str
    :ivar localized_value: Localized name.
    :vartype localized_value: str
    """

    value: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Non-localized name."""
    localized_value: Optional[str] = rest_field(
        name="localizedValue", visibility=["read", "create", "update", "delete", "query"]
    )
    """Localized name."""

    @overload
    def __init__(
        self,
        *,
        value: Optional[str] = None,
        localized_value: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class LogAnalyticsConfiguration(_Model):
    """LogAnalyticsConfiguration.

    :ivar customer_id:
    :vartype customer_id: str
    :ivar shared_key:
    :vartype shared_key: str
    """

    customer_id: Optional[str] = rest_field(
        name="customerId", visibility=["read", "create", "update", "delete", "query"]
    )
    shared_key: Optional[str] = rest_field(name="sharedKey", visibility=["create", "update"])

    @overload
    def __init__(
        self,
        *,
        customer_id: Optional[str] = None,
        shared_key: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Login(_Model):
    """The configuration settings of the login flow of users using App Service
    Authentication/Authorization.

    :ivar routes: The routes that specify the endpoints used for login and logout requests.
    :vartype routes: ~azure.mgmt.web.models.LoginRoutes
    :ivar token_store: The configuration settings of the token store.
    :vartype token_store: ~azure.mgmt.web.models.TokenStore
    :ivar preserve_url_fragments_for_logins: <code>true</code> if the fragments from the request
     are preserved after the login request is made; otherwise, <code>false</code>.
    :vartype preserve_url_fragments_for_logins: bool
    :ivar allowed_external_redirect_urls: External URLs that can be redirected to as part of
     logging in or logging out of the app. Note that the query string part of the URL is ignored.
     This is an advanced setting typically only needed by Windows Store application backends. Note
     that URLs within the current domain are always implicitly allowed.
    :vartype allowed_external_redirect_urls: list[str]
    :ivar cookie_expiration: The configuration settings of the session cookie's expiration.
    :vartype cookie_expiration: ~azure.mgmt.web.models.CookieExpiration
    :ivar nonce: The configuration settings of the nonce used in the login flow.
    :vartype nonce: ~azure.mgmt.web.models.Nonce
    """

    routes: Optional["_models.LoginRoutes"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The routes that specify the endpoints used for login and logout requests."""
    token_store: Optional["_models.TokenStore"] = rest_field(
        name="tokenStore", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the token store."""
    preserve_url_fragments_for_logins: Optional[bool] = rest_field(
        name="preserveUrlFragmentsForLogins", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if the fragments from the request are preserved after the login request is
     made; otherwise, <code>false</code>."""
    allowed_external_redirect_urls: Optional[list[str]] = rest_field(
        name="allowedExternalRedirectUrls", visibility=["read", "create", "update", "delete", "query"]
    )
    """External URLs that can be redirected to as part of logging in or logging out of the app. Note
     that the query string part of the URL is ignored. This is an advanced setting typically only
     needed by Windows Store application backends. Note that URLs within the current domain are
     always implicitly allowed."""
    cookie_expiration: Optional["_models.CookieExpiration"] = rest_field(
        name="cookieExpiration", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the session cookie's expiration."""
    nonce: Optional["_models.Nonce"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The configuration settings of the nonce used in the login flow."""

    @overload
    def __init__(
        self,
        *,
        routes: Optional["_models.LoginRoutes"] = None,
        token_store: Optional["_models.TokenStore"] = None,
        preserve_url_fragments_for_logins: Optional[bool] = None,
        allowed_external_redirect_urls: Optional[list[str]] = None,
        cookie_expiration: Optional["_models.CookieExpiration"] = None,
        nonce: Optional["_models.Nonce"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class LoginRoutes(_Model):
    """The routes that specify the endpoints used for login and logout requests.

    :ivar logout_endpoint: The endpoint at which a logout request should be made.
    :vartype logout_endpoint: str
    """

    logout_endpoint: Optional[str] = rest_field(
        name="logoutEndpoint", visibility=["read", "create", "update", "delete", "query"]
    )
    """The endpoint at which a logout request should be made."""

    @overload
    def __init__(
        self,
        *,
        logout_endpoint: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class LoginScopes(_Model):
    """The configuration settings of the login flow, including the scopes that should be requested.

    :ivar scopes: A list of the scopes that should be requested while authenticating.
    :vartype scopes: list[str]
    """

    scopes: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """A list of the scopes that should be requested while authenticating."""

    @overload
    def __init__(
        self,
        *,
        scopes: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class LogSpecification(_Model):
    """Log Definition of a single resource metric.

    :ivar name:
    :vartype name: str
    :ivar display_name:
    :vartype display_name: str
    :ivar blob_duration:
    :vartype blob_duration: str
    :ivar log_filter_pattern:
    :vartype log_filter_pattern: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    display_name: Optional[str] = rest_field(
        name="displayName", visibility=["read", "create", "update", "delete", "query"]
    )
    blob_duration: Optional[str] = rest_field(
        name="blobDuration", visibility=["read", "create", "update", "delete", "query"]
    )
    log_filter_pattern: Optional[str] = rest_field(
        name="logFilterPattern", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        display_name: Optional[str] = None,
        blob_duration: Optional[str] = None,
        log_filter_pattern: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ManagedServiceIdentity(_Model):
    """Managed service identity.

    :ivar type: Type of managed service identity. Known values are: "SystemAssigned",
     "UserAssigned", "SystemAssigned, UserAssigned", and "None".
    :vartype type: str or ~azure.mgmt.web.models.ManagedServiceIdentityType
    :ivar tenant_id: Tenant of managed service identity.
    :vartype tenant_id: str
    :ivar principal_id: Principal Id of managed service identity.
    :vartype principal_id: str
    :ivar user_assigned_identities: The list of user assigned identities associated with the
     resource. The user identity dictionary key references will be ARM resource ids in the form:
     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}.
    :vartype user_assigned_identities: dict[str, ~azure.mgmt.web.models.UserAssignedIdentity]
    """

    type: Optional[Union[str, "_models.ManagedServiceIdentityType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Type of managed service identity. Known values are: \"SystemAssigned\", \"UserAssigned\",
     \"SystemAssigned, UserAssigned\", and \"None\"."""
    tenant_id: Optional[str] = rest_field(name="tenantId", visibility=["read"])
    """Tenant of managed service identity."""
    principal_id: Optional[str] = rest_field(name="principalId", visibility=["read"])
    """Principal Id of managed service identity."""
    user_assigned_identities: Optional[dict[str, "_models.UserAssignedIdentity"]] = rest_field(
        name="userAssignedIdentities", visibility=["read", "create", "update", "delete", "query"]
    )
    """The list of user assigned identities associated with the resource. The user identity dictionary
     key references will be ARM resource ids in the form:
     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}."""

    @overload
    def __init__(
        self,
        *,
        type: Optional[Union[str, "_models.ManagedServiceIdentityType"]] = None,
        user_assigned_identities: Optional[dict[str, "_models.UserAssignedIdentity"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class MetricAvailability(_Model):
    """Retention policy of a resource metric.

    :ivar time_grain:
    :vartype time_grain: str
    :ivar blob_duration:
    :vartype blob_duration: str
    """

    time_grain: Optional[str] = rest_field(name="timeGrain", visibility=["read", "create", "update", "delete", "query"])
    blob_duration: Optional[str] = rest_field(
        name="blobDuration", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        time_grain: Optional[str] = None,
        blob_duration: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class MetricSpecification(_Model):
    """Definition of a single resource metric.

    :ivar name:
    :vartype name: str
    :ivar display_name:
    :vartype display_name: str
    :ivar display_description:
    :vartype display_description: str
    :ivar unit:
    :vartype unit: str
    :ivar aggregation_type:
    :vartype aggregation_type: str
    :ivar supports_instance_level_aggregation:
    :vartype supports_instance_level_aggregation: bool
    :ivar enable_regional_mdm_account:
    :vartype enable_regional_mdm_account: bool
    :ivar source_mdm_account:
    :vartype source_mdm_account: str
    :ivar source_mdm_namespace:
    :vartype source_mdm_namespace: str
    :ivar metric_filter_pattern:
    :vartype metric_filter_pattern: str
    :ivar fill_gap_with_zero:
    :vartype fill_gap_with_zero: bool
    :ivar is_internal:
    :vartype is_internal: bool
    :ivar dimensions:
    :vartype dimensions: list[~azure.mgmt.web.models.Dimension]
    :ivar category:
    :vartype category: str
    :ivar availabilities:
    :vartype availabilities: list[~azure.mgmt.web.models.MetricAvailability]
    :ivar supported_time_grain_types:
    :vartype supported_time_grain_types: list[str]
    :ivar supported_aggregation_types:
    :vartype supported_aggregation_types: list[str]
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    display_name: Optional[str] = rest_field(
        name="displayName", visibility=["read", "create", "update", "delete", "query"]
    )
    display_description: Optional[str] = rest_field(
        name="displayDescription", visibility=["read", "create", "update", "delete", "query"]
    )
    unit: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    aggregation_type: Optional[str] = rest_field(
        name="aggregationType", visibility=["read", "create", "update", "delete", "query"]
    )
    supports_instance_level_aggregation: Optional[bool] = rest_field(
        name="supportsInstanceLevelAggregation", visibility=["read", "create", "update", "delete", "query"]
    )
    enable_regional_mdm_account: Optional[bool] = rest_field(
        name="enableRegionalMdmAccount", visibility=["read", "create", "update", "delete", "query"]
    )
    source_mdm_account: Optional[str] = rest_field(
        name="sourceMdmAccount", visibility=["read", "create", "update", "delete", "query"]
    )
    source_mdm_namespace: Optional[str] = rest_field(
        name="sourceMdmNamespace", visibility=["read", "create", "update", "delete", "query"]
    )
    metric_filter_pattern: Optional[str] = rest_field(
        name="metricFilterPattern", visibility=["read", "create", "update", "delete", "query"]
    )
    fill_gap_with_zero: Optional[bool] = rest_field(
        name="fillGapWithZero", visibility=["read", "create", "update", "delete", "query"]
    )
    is_internal: Optional[bool] = rest_field(
        name="isInternal", visibility=["read", "create", "update", "delete", "query"]
    )
    dimensions: Optional[list["_models.Dimension"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    category: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    availabilities: Optional[list["_models.MetricAvailability"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    supported_time_grain_types: Optional[list[str]] = rest_field(
        name="supportedTimeGrainTypes", visibility=["read", "create", "update", "delete", "query"]
    )
    supported_aggregation_types: Optional[list[str]] = rest_field(
        name="supportedAggregationTypes", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        display_name: Optional[str] = None,
        display_description: Optional[str] = None,
        unit: Optional[str] = None,
        aggregation_type: Optional[str] = None,
        supports_instance_level_aggregation: Optional[bool] = None,
        enable_regional_mdm_account: Optional[bool] = None,
        source_mdm_account: Optional[str] = None,
        source_mdm_namespace: Optional[str] = None,
        metric_filter_pattern: Optional[str] = None,
        fill_gap_with_zero: Optional[bool] = None,
        is_internal: Optional[bool] = None,
        dimensions: Optional[list["_models.Dimension"]] = None,
        category: Optional[str] = None,
        availabilities: Optional[list["_models.MetricAvailability"]] = None,
        supported_time_grain_types: Optional[list[str]] = None,
        supported_aggregation_types: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class MigrateMySqlRequest(ProxyOnlyResource):
    """MySQL migration request.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: MigrateMySqlRequest resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.MigrateMySqlRequestProperties
    """

    properties: Optional["_models.MigrateMySqlRequestProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """MigrateMySqlRequest resource specific properties."""

    __flattened_items = ["connection_string", "migration_type"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.MigrateMySqlRequestProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class MigrateMySqlRequestProperties(_Model):
    """MigrateMySqlRequest resource specific properties.

    :ivar connection_string: Connection string to the remote MySQL database. Required.
    :vartype connection_string: str
    :ivar migration_type: The type of migration operation to be done. Required. Known values are:
     "LocalToRemote" and "RemoteToLocal".
    :vartype migration_type: str or ~azure.mgmt.web.models.MySqlMigrationType
    """

    connection_string: str = rest_field(
        name="connectionString", visibility=["read", "create", "update", "delete", "query"]
    )
    """Connection string to the remote MySQL database. Required."""
    migration_type: Union[str, "_models.MySqlMigrationType"] = rest_field(
        name="migrationType", visibility=["read", "create", "update", "delete", "query"]
    )
    """The type of migration operation to be done. Required. Known values are: \"LocalToRemote\" and
     \"RemoteToLocal\"."""

    @overload
    def __init__(
        self,
        *,
        connection_string: str,
        migration_type: Union[str, "_models.MySqlMigrationType"],
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class MigrateMySqlStatus(ProxyResource):
    """MySQL migration status.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: MigrateMySqlStatus resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.MigrateMySqlStatusProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.MigrateMySqlStatusProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """MigrateMySqlStatus resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["migration_operation_status", "operation_id", "local_my_sql_enabled"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.MigrateMySqlStatusProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class MigrateMySqlStatusProperties(_Model):
    """MigrateMySqlStatus resource specific properties.

    :ivar migration_operation_status: Status of the migration task. Known values are: "InProgress",
     "Failed", "Succeeded", "TimedOut", and "Created".
    :vartype migration_operation_status: str or ~azure.mgmt.web.models.OperationStatus
    :ivar operation_id: Operation ID for the migration task.
    :vartype operation_id: str
    :ivar local_my_sql_enabled: True if the web app has in app MySql enabled.
    :vartype local_my_sql_enabled: bool
    """

    migration_operation_status: Optional[Union[str, "_models.OperationStatus"]] = rest_field(
        name="migrationOperationStatus", visibility=["read"]
    )
    """Status of the migration task. Known values are: \"InProgress\", \"Failed\", \"Succeeded\",
     \"TimedOut\", and \"Created\"."""
    operation_id: Optional[str] = rest_field(name="operationId", visibility=["read"])
    """Operation ID for the migration task."""
    local_my_sql_enabled: Optional[bool] = rest_field(name="localMySqlEnabled", visibility=["read"])
    """True if the web app has in app MySql enabled."""


class MSDeploy(ProxyOnlyResource):
    """MSDeploy ARM PUT information.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: Core resource properties.
    :vartype properties: ~azure.mgmt.web.models.MSDeployProperties
    """

    properties: Optional["_models.MSDeployProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Core resource properties."""

    __flattened_items = [
        "package_uri",
        "connection_string",
        "db_type",
        "set_parameters_xml_file_uri",
        "set_parameters",
        "skip_app_data",
        "app_offline",
        "add_on_packages",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.MSDeployProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class MSDeployCore(_Model):
    """MSDeploy ARM PUT core information.

    :ivar package_uri: Package URI.
    :vartype package_uri: str
    :ivar connection_string: SQL Connection String.
    :vartype connection_string: str
    :ivar db_type: Database Type.
    :vartype db_type: str
    :ivar set_parameters_xml_file_uri: URI of MSDeploy Parameters file. Must not be set if
     SetParameters is used.
    :vartype set_parameters_xml_file_uri: str
    :ivar set_parameters: MSDeploy Parameters. Must not be set if SetParametersXmlFileUri is used.
    :vartype set_parameters: dict[str, str]
    :ivar skip_app_data: Controls whether the MSDeploy operation skips the App_Data directory. If
     set to <code>true</code>, the existing App_Data directory on the destination will not be
     deleted, and any App_Data directory in the source will be ignored. Setting is
     <code>false</code> by default.
    :vartype skip_app_data: bool
    :ivar app_offline: Sets the AppOffline rule while the MSDeploy operation executes. Setting is
     <code>false</code> by default.
    :vartype app_offline: bool
    """

    package_uri: Optional[str] = rest_field(
        name="packageUri", visibility=["read", "create", "update", "delete", "query"]
    )
    """Package URI."""
    connection_string: Optional[str] = rest_field(
        name="connectionString", visibility=["read", "create", "update", "delete", "query"]
    )
    """SQL Connection String."""
    db_type: Optional[str] = rest_field(name="dbType", visibility=["read", "create", "update", "delete", "query"])
    """Database Type."""
    set_parameters_xml_file_uri: Optional[str] = rest_field(
        name="setParametersXmlFileUri", visibility=["read", "create", "update", "delete", "query"]
    )
    """URI of MSDeploy Parameters file. Must not be set if SetParameters is used."""
    set_parameters: Optional[dict[str, str]] = rest_field(
        name="setParameters", visibility=["read", "create", "update", "delete", "query"]
    )
    """MSDeploy Parameters. Must not be set if SetParametersXmlFileUri is used."""
    skip_app_data: Optional[bool] = rest_field(
        name="skipAppData", visibility=["read", "create", "update", "delete", "query"]
    )
    """Controls whether the MSDeploy operation skips the App_Data directory. If set to
     <code>true</code>, the existing App_Data directory on the destination will not be deleted, and
     any App_Data directory in the source will be ignored. Setting is <code>false</code> by default."""
    app_offline: Optional[bool] = rest_field(
        name="appOffline", visibility=["read", "create", "update", "delete", "query"]
    )
    """Sets the AppOffline rule while the MSDeploy operation executes. Setting is <code>false</code>
     by default."""

    @overload
    def __init__(
        self,
        *,
        package_uri: Optional[str] = None,
        connection_string: Optional[str] = None,
        db_type: Optional[str] = None,
        set_parameters_xml_file_uri: Optional[str] = None,
        set_parameters: Optional[dict[str, str]] = None,
        skip_app_data: Optional[bool] = None,
        app_offline: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class MSDeployLog(ProxyOnlyResource):
    """MSDeploy log.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: MSDeployLog resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.MSDeployLogProperties
    """

    properties: Optional["_models.MSDeployLogProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """MSDeployLog resource specific properties."""

    __flattened_items = ["entries"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.MSDeployLogProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class MSDeployLogEntry(_Model):
    """MSDeploy log entry.

    :ivar time: Timestamp of log entry.
    :vartype time: ~datetime.datetime
    :ivar type: Log entry type. Known values are: "Message", "Warning", and "Error".
    :vartype type: str or ~azure.mgmt.web.models.MSDeployLogEntryType
    :ivar message: Log entry message.
    :vartype message: str
    """

    time: Optional[datetime.datetime] = rest_field(visibility=["read"], format="rfc3339")
    """Timestamp of log entry."""
    type: Optional[Union[str, "_models.MSDeployLogEntryType"]] = rest_field(visibility=["read"])
    """Log entry type. Known values are: \"Message\", \"Warning\", and \"Error\"."""
    message: Optional[str] = rest_field(visibility=["read"])
    """Log entry message."""


class MSDeployLogProperties(_Model):
    """MSDeployLog resource specific properties.

    :ivar entries: List of log entry messages.
    :vartype entries: list[~azure.mgmt.web.models.MSDeployLogEntry]
    """

    entries: Optional[list["_models.MSDeployLogEntry"]] = rest_field(visibility=["read"])
    """List of log entry messages."""


class MSDeployProperties(MSDeployCore):
    """MSDeploy ARM PUT information properties.

    :ivar package_uri: Package URI.
    :vartype package_uri: str
    :ivar connection_string: SQL Connection String.
    :vartype connection_string: str
    :ivar db_type: Database Type.
    :vartype db_type: str
    :ivar set_parameters_xml_file_uri: URI of MSDeploy Parameters file. Must not be set if
     SetParameters is used.
    :vartype set_parameters_xml_file_uri: str
    :ivar set_parameters: MSDeploy Parameters. Must not be set if SetParametersXmlFileUri is used.
    :vartype set_parameters: dict[str, str]
    :ivar skip_app_data: Controls whether the MSDeploy operation skips the App_Data directory. If
     set to <code>true</code>, the existing App_Data directory on the destination will not be
     deleted, and any App_Data directory in the source will be ignored. Setting is
     <code>false</code> by default.
    :vartype skip_app_data: bool
    :ivar app_offline: Sets the AppOffline rule while the MSDeploy operation executes. Setting is
     <code>false</code> by default.
    :vartype app_offline: bool
    :ivar add_on_packages: List of Add-On packages. Add-On packages implicitly enable the Do Not
     Delete MSDeploy rule.
    :vartype add_on_packages: list[~azure.mgmt.web.models.MSDeployCore]
    """

    add_on_packages: Optional[list["_models.MSDeployCore"]] = rest_field(
        name="addOnPackages", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of Add-On packages. Add-On packages implicitly enable the Do Not Delete MSDeploy rule."""

    @overload
    def __init__(
        self,
        *,
        package_uri: Optional[str] = None,
        connection_string: Optional[str] = None,
        db_type: Optional[str] = None,
        set_parameters_xml_file_uri: Optional[str] = None,
        set_parameters: Optional[dict[str, str]] = None,
        skip_app_data: Optional[bool] = None,
        app_offline: Optional[bool] = None,
        add_on_packages: Optional[list["_models.MSDeployCore"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class MSDeployStatus(ProxyResource):
    """MSDeploy ARM response.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: MSDeployStatus resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.MSDeployStatusProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.MSDeployStatusProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """MSDeployStatus resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["deployer", "provisioning_state", "start_time", "end_time", "complete"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.MSDeployStatusProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class MSDeployStatusProperties(_Model):
    """MSDeployStatus resource specific properties.

    :ivar deployer: Username of deployer.
    :vartype deployer: str
    :ivar provisioning_state: Provisioning state. Known values are: "accepted", "running",
     "succeeded", "failed", and "canceled".
    :vartype provisioning_state: str or ~azure.mgmt.web.models.MSDeployProvisioningState
    :ivar start_time: Start time of deploy operation.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: End time of deploy operation.
    :vartype end_time: ~datetime.datetime
    :ivar complete: Whether the deployment operation has completed.
    :vartype complete: bool
    """

    deployer: Optional[str] = rest_field(visibility=["read"])
    """Username of deployer."""
    provisioning_state: Optional[Union[str, "_models.MSDeployProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read"]
    )
    """Provisioning state. Known values are: \"accepted\", \"running\", \"succeeded\", \"failed\", and
     \"canceled\"."""
    start_time: Optional[datetime.datetime] = rest_field(name="startTime", visibility=["read"], format="rfc3339")
    """Start time of deploy operation."""
    end_time: Optional[datetime.datetime] = rest_field(name="endTime", visibility=["read"], format="rfc3339")
    """End time of deploy operation."""
    complete: Optional[bool] = rest_field(visibility=["read"])
    """Whether the deployment operation has completed."""


class NameIdentifier(_Model):
    """Identifies an object.

    :ivar name: Name of the object.
    :vartype name: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the object."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class NameValuePair(_Model):
    """Name value pair.

    :ivar name: Pair name.
    :vartype name: str
    :ivar value: Pair value.
    :vartype value: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Pair name."""
    value: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Pair value."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        value: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class NetworkFeatures(ProxyResource):
    """Full view of network features for an app (presently VNET integration and Hybrid Connections).

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: NetworkFeatures resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.NetworkFeaturesProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.NetworkFeaturesProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """NetworkFeatures resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "virtual_network_name",
        "virtual_network_connection",
        "hybrid_connections",
        "hybrid_connections_v2",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.NetworkFeaturesProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class NetworkFeaturesProperties(_Model):
    """NetworkFeatures resource specific properties.

    :ivar virtual_network_name: The Virtual Network name.
    :vartype virtual_network_name: str
    :ivar virtual_network_connection: The Virtual Network summary view.
    :vartype virtual_network_connection: ~azure.mgmt.web.models.VnetInfo
    :ivar hybrid_connections: The Hybrid Connections summary view.
    :vartype hybrid_connections: list[~azure.mgmt.web.models.RelayServiceConnectionEntity]
    :ivar hybrid_connections_v2: The Hybrid Connection V2 (Service Bus) view.
    :vartype hybrid_connections_v2: list[~azure.mgmt.web.models.HybridConnection]
    """

    virtual_network_name: Optional[str] = rest_field(name="virtualNetworkName", visibility=["read"])
    """The Virtual Network name."""
    virtual_network_connection: Optional["_models.VnetInfo"] = rest_field(
        name="virtualNetworkConnection", visibility=["read"]
    )
    """The Virtual Network summary view."""
    hybrid_connections: Optional[list["_models.RelayServiceConnectionEntity"]] = rest_field(
        name="hybridConnections", visibility=["read"]
    )
    """The Hybrid Connections summary view."""
    hybrid_connections_v2: Optional[list["_models.HybridConnection"]] = rest_field(
        name="hybridConnectionsV2", visibility=["read"]
    )
    """The Hybrid Connection V2 (Service Bus) view."""


class NetworkTrace(_Model):
    """Network trace.

    :ivar path: Local file path for the captured network trace file.
    :vartype path: str
    :ivar status: Current status of the network trace operation, same as Operation.Status
     (InProgress/Succeeded/Failed).
    :vartype status: str
    :ivar message: Detailed message of a network trace operation, e.g. error message in case of
     failure.
    :vartype message: str
    """

    path: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Local file path for the captured network trace file."""
    status: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Current status of the network trace operation, same as Operation.Status
     (InProgress/Succeeded/Failed)."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Detailed message of a network trace operation, e.g. error message in case of failure."""

    @overload
    def __init__(
        self,
        *,
        path: Optional[str] = None,
        status: Optional[str] = None,
        message: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Nonce(_Model):
    """The configuration settings of the nonce used in the login flow.

    :ivar validate_nonce: <code>false</code> if the nonce should not be validated while completing
     the login flow; otherwise, <code>true</code>.
    :vartype validate_nonce: bool
    :ivar nonce_expiration_interval: The time after the request is made when the nonce should
     expire.
    :vartype nonce_expiration_interval: str
    """

    validate_nonce: Optional[bool] = rest_field(
        name="validateNonce", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>false</code> if the nonce should not be validated while completing the login flow;
     otherwise, <code>true</code>."""
    nonce_expiration_interval: Optional[str] = rest_field(
        name="nonceExpirationInterval", visibility=["read", "create", "update", "delete", "query"]
    )
    """The time after the request is made when the nonce should expire."""

    @overload
    def __init__(
        self,
        *,
        validate_nonce: Optional[bool] = None,
        nonce_expiration_interval: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OpenAuthenticationAccessPolicies(_Model):
    """AuthenticationPolicy of type Open.

    :ivar policies: Open authentication policies.
    :vartype policies: dict[str, ~azure.mgmt.web.models.OpenAuthenticationAccessPolicy]
    """

    policies: Optional[dict[str, "_models.OpenAuthenticationAccessPolicy"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Open authentication policies."""

    @overload
    def __init__(
        self,
        *,
        policies: Optional[dict[str, "_models.OpenAuthenticationAccessPolicy"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OpenAuthenticationAccessPolicy(_Model):
    """Open authentication access policy defined by user.

    :ivar type: Type of provider for OAuth. "AAD"
    :vartype type: str or ~azure.mgmt.web.models.OpenAuthenticationProviderType
    :ivar claims: The access policy claims.
    :vartype claims: list[~azure.mgmt.web.models.OpenAuthenticationPolicyClaim]
    """

    type: Optional[Union[str, "_models.OpenAuthenticationProviderType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Type of provider for OAuth. \"AAD\""""
    claims: Optional[list["_models.OpenAuthenticationPolicyClaim"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The access policy claims."""

    @overload
    def __init__(
        self,
        *,
        type: Optional[Union[str, "_models.OpenAuthenticationProviderType"]] = None,
        claims: Optional[list["_models.OpenAuthenticationPolicyClaim"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OpenAuthenticationPolicyClaim(_Model):
    """Open authentication policy claim.

    :ivar name: The name of the claim.
    :vartype name: str
    :ivar value: The value of the claim.
    :vartype value: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The name of the claim."""
    value: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The value of the claim."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        value: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OpenIdConnectClientCredential(_Model):
    """The authentication client credentials of the custom Open ID Connect provider.

    :ivar method: The method that should be used to authenticate the user. Default value is
     "ClientSecretPost".
    :vartype method: str
    :ivar client_secret_setting_name: The app setting that contains the client secret for the
     custom Open ID Connect provider.
    :vartype client_secret_setting_name: str
    """

    method: Optional[Literal["ClientSecretPost"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The method that should be used to authenticate the user. Default value is \"ClientSecretPost\"."""
    client_secret_setting_name: Optional[str] = rest_field(
        name="clientSecretSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The app setting that contains the client secret for the custom Open ID Connect provider."""

    @overload
    def __init__(
        self,
        *,
        method: Optional[Literal["ClientSecretPost"]] = None,
        client_secret_setting_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OpenIdConnectConfig(_Model):
    """The configuration settings of the endpoints used for the custom Open ID Connect provider.

    :ivar authorization_endpoint: The endpoint to be used to make an authorization request.
    :vartype authorization_endpoint: str
    :ivar token_endpoint: The endpoint to be used to request a token.
    :vartype token_endpoint: str
    :ivar issuer: The endpoint that issues the token.
    :vartype issuer: str
    :ivar certification_uri: The endpoint that provides the keys necessary to validate the token.
    :vartype certification_uri: str
    :ivar well_known_open_id_configuration: The endpoint that contains all the configuration
     endpoints for the provider.
    :vartype well_known_open_id_configuration: str
    """

    authorization_endpoint: Optional[str] = rest_field(
        name="authorizationEndpoint", visibility=["read", "create", "update", "delete", "query"]
    )
    """The endpoint to be used to make an authorization request."""
    token_endpoint: Optional[str] = rest_field(
        name="tokenEndpoint", visibility=["read", "create", "update", "delete", "query"]
    )
    """The endpoint to be used to request a token."""
    issuer: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The endpoint that issues the token."""
    certification_uri: Optional[str] = rest_field(
        name="certificationUri", visibility=["read", "create", "update", "delete", "query"]
    )
    """The endpoint that provides the keys necessary to validate the token."""
    well_known_open_id_configuration: Optional[str] = rest_field(
        name="wellKnownOpenIdConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """The endpoint that contains all the configuration endpoints for the provider."""

    @overload
    def __init__(
        self,
        *,
        authorization_endpoint: Optional[str] = None,
        token_endpoint: Optional[str] = None,
        issuer: Optional[str] = None,
        certification_uri: Optional[str] = None,
        well_known_open_id_configuration: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OpenIdConnectLogin(_Model):
    """The configuration settings of the login flow of the custom Open ID Connect provider.

    :ivar name_claim_type: The name of the claim that contains the users name.
    :vartype name_claim_type: str
    :ivar scopes: A list of the scopes that should be requested while authenticating.
    :vartype scopes: list[str]
    """

    name_claim_type: Optional[str] = rest_field(
        name="nameClaimType", visibility=["read", "create", "update", "delete", "query"]
    )
    """The name of the claim that contains the users name."""
    scopes: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """A list of the scopes that should be requested while authenticating."""

    @overload
    def __init__(
        self,
        *,
        name_claim_type: Optional[str] = None,
        scopes: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OpenIdConnectRegistration(_Model):
    """The configuration settings of the app registration for the custom Open ID Connect provider.

    :ivar client_id: The client id of the custom Open ID Connect provider.
    :vartype client_id: str
    :ivar client_credential: The authentication credentials of the custom Open ID Connect provider.
    :vartype client_credential: ~azure.mgmt.web.models.OpenIdConnectClientCredential
    :ivar open_id_connect_configuration: The configuration settings of the endpoints used for the
     custom Open ID Connect provider.
    :vartype open_id_connect_configuration: ~azure.mgmt.web.models.OpenIdConnectConfig
    """

    client_id: Optional[str] = rest_field(name="clientId", visibility=["read", "create", "update", "delete", "query"])
    """The client id of the custom Open ID Connect provider."""
    client_credential: Optional["_models.OpenIdConnectClientCredential"] = rest_field(
        name="clientCredential", visibility=["read", "create", "update", "delete", "query"]
    )
    """The authentication credentials of the custom Open ID Connect provider."""
    open_id_connect_configuration: Optional["_models.OpenIdConnectConfig"] = rest_field(
        name="openIdConnectConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the endpoints used for the custom Open ID Connect provider."""

    @overload
    def __init__(
        self,
        *,
        client_id: Optional[str] = None,
        client_credential: Optional["_models.OpenIdConnectClientCredential"] = None,
        open_id_connect_configuration: Optional["_models.OpenIdConnectConfig"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Operation(_Model):
    """An operation on a resource.

    :ivar id: Operation ID.
    :vartype id: str
    :ivar name: Operation name.
    :vartype name: str
    :ivar status: The current status of the operation. Known values are: "InProgress", "Failed",
     "Succeeded", "TimedOut", and "Created".
    :vartype status: str or ~azure.mgmt.web.models.OperationStatus
    :ivar errors: Any errors associate with the operation.
    :vartype errors: list[~azure.mgmt.web.models.ErrorEntity]
    :ivar created_time: Time when operation has started.
    :vartype created_time: ~datetime.datetime
    :ivar modified_time: Time when operation has been updated.
    :vartype modified_time: ~datetime.datetime
    :ivar expiration_time: Time when operation will expire.
    :vartype expiration_time: ~datetime.datetime
    :ivar geo_master_operation_id: Applicable only for stamp operation ids.
    :vartype geo_master_operation_id: str
    """

    id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Operation ID."""
    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Operation name."""
    status: Optional[Union[str, "_models.OperationStatus"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The current status of the operation. Known values are: \"InProgress\", \"Failed\",
     \"Succeeded\", \"TimedOut\", and \"Created\"."""
    errors: Optional[list["_models.ErrorEntity"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Any errors associate with the operation."""
    created_time: Optional[datetime.datetime] = rest_field(
        name="createdTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Time when operation has started."""
    modified_time: Optional[datetime.datetime] = rest_field(
        name="modifiedTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Time when operation has been updated."""
    expiration_time: Optional[datetime.datetime] = rest_field(
        name="expirationTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Time when operation will expire."""
    geo_master_operation_id: Optional[str] = rest_field(
        name="geoMasterOperationId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Applicable only for stamp operation ids."""

    @overload
    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        name: Optional[str] = None,
        status: Optional[Union[str, "_models.OperationStatus"]] = None,
        errors: Optional[list["_models.ErrorEntity"]] = None,
        created_time: Optional[datetime.datetime] = None,
        modified_time: Optional[datetime.datetime] = None,
        expiration_time: Optional[datetime.datetime] = None,
        geo_master_operation_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OperationResultProperties(_Model):
    """The run operation result properties.

    :ivar start_time: The start time of the workflow scope repetition.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: The end time of the workflow scope repetition.
    :vartype end_time: ~datetime.datetime
    :ivar correlation: The correlation properties.
    :vartype correlation: ~azure.mgmt.web.models.RunActionCorrelation
    :ivar status: The status of the workflow scope repetition. Known values are: "NotSpecified",
     "Paused", "Running", "Waiting", "Succeeded", "Skipped", "Suspended", "Cancelled", "Failed",
     "Faulted", "TimedOut", "Aborted", and "Ignored".
    :vartype status: str or ~azure.mgmt.web.models.WorkflowStatus
    :ivar code: The workflow scope repetition code.
    :vartype code: str
    :ivar error: Anything.
    :vartype error: any
    """

    start_time: Optional[datetime.datetime] = rest_field(
        name="startTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The start time of the workflow scope repetition."""
    end_time: Optional[datetime.datetime] = rest_field(
        name="endTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The end time of the workflow scope repetition."""
    correlation: Optional["_models.RunActionCorrelation"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The correlation properties."""
    status: Optional[Union[str, "_models.WorkflowStatus"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The status of the workflow scope repetition. Known values are: \"NotSpecified\", \"Paused\",
     \"Running\", \"Waiting\", \"Succeeded\", \"Skipped\", \"Suspended\", \"Cancelled\", \"Failed\",
     \"Faulted\", \"TimedOut\", \"Aborted\", and \"Ignored\"."""
    code: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The workflow scope repetition code."""
    error: Optional[Any] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Anything."""

    @overload
    def __init__(
        self,
        *,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        correlation: Optional["_models.RunActionCorrelation"] = None,
        status: Optional[Union[str, "_models.WorkflowStatus"]] = None,
        code: Optional[str] = None,
        error: Optional[Any] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OperationResult(OperationResultProperties):
    """The operation result definition.

    :ivar start_time: The start time of the workflow scope repetition.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: The end time of the workflow scope repetition.
    :vartype end_time: ~datetime.datetime
    :ivar correlation: The correlation properties.
    :vartype correlation: ~azure.mgmt.web.models.RunActionCorrelation
    :ivar status: The status of the workflow scope repetition. Known values are: "NotSpecified",
     "Paused", "Running", "Waiting", "Succeeded", "Skipped", "Suspended", "Cancelled", "Failed",
     "Faulted", "TimedOut", "Aborted", and "Ignored".
    :vartype status: str or ~azure.mgmt.web.models.WorkflowStatus
    :ivar code: The workflow scope repetition code.
    :vartype code: str
    :ivar error: Anything.
    :vartype error: any
    :ivar tracking_id: Gets the tracking id.
    :vartype tracking_id: str
    :ivar inputs: Gets the inputs.
    :vartype inputs: any
    :ivar inputs_link: Gets the link to inputs.
    :vartype inputs_link: ~azure.mgmt.web.models.ContentLink
    :ivar outputs: Gets the outputs.
    :vartype outputs: any
    :ivar outputs_link: Gets the link to outputs.
    :vartype outputs_link: ~azure.mgmt.web.models.ContentLink
    :ivar tracked_properties: Gets the tracked properties.
    :vartype tracked_properties: any
    :ivar retry_history: Gets the retry histories.
    :vartype retry_history: list[~azure.mgmt.web.models.RetryHistory]
    :ivar iteration_count:
    :vartype iteration_count: int
    """

    tracking_id: Optional[str] = rest_field(name="trackingId", visibility=["read"])
    """Gets the tracking id."""
    inputs: Optional[Any] = rest_field(visibility=["read"])
    """Gets the inputs."""
    inputs_link: Optional["_models.ContentLink"] = rest_field(name="inputsLink", visibility=["read"])
    """Gets the link to inputs."""
    outputs: Optional[Any] = rest_field(visibility=["read"])
    """Gets the outputs."""
    outputs_link: Optional["_models.ContentLink"] = rest_field(name="outputsLink", visibility=["read"])
    """Gets the link to outputs."""
    tracked_properties: Optional[Any] = rest_field(name="trackedProperties", visibility=["read"])
    """Gets the tracked properties."""
    retry_history: Optional[list["_models.RetryHistory"]] = rest_field(
        name="retryHistory", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets the retry histories."""
    iteration_count: Optional[int] = rest_field(
        name="iterationCount", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        correlation: Optional["_models.RunActionCorrelation"] = None,
        status: Optional[Union[str, "_models.WorkflowStatus"]] = None,
        code: Optional[str] = None,
        error: Optional[Any] = None,
        retry_history: Optional[list["_models.RetryHistory"]] = None,
        iteration_count: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OutboundEnvironmentEndpoint(_Model):
    """Endpoints accessed for a common purpose that the App Service Environment requires outbound
    network access to.

    :ivar category: The type of service accessed by the App Service Environment, e.g., Azure
     Storage, Azure SQL Database, and Azure Active Directory.
    :vartype category: str
    :ivar endpoints: The endpoints that the App Service Environment reaches the service at.
    :vartype endpoints: list[~azure.mgmt.web.models.EndpointDependency]
    """

    category: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The type of service accessed by the App Service Environment, e.g., Azure Storage, Azure SQL
     Database, and Azure Active Directory."""
    endpoints: Optional[list["_models.EndpointDependency"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The endpoints that the App Service Environment reaches the service at."""

    @overload
    def __init__(
        self,
        *,
        category: Optional[str] = None,
        endpoints: Optional[list["_models.EndpointDependency"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class OutboundVnetRouting(_Model):
    """Outbound traffic options over virtual network.

    :ivar all_traffic: Enables all other routing options defined in OutboundVnetRouting if this
     setting is set to true.
    :vartype all_traffic: bool
    :ivar application_traffic: This causes all outbound traffic to have Virtual Network Security
     Groups and User Defined Routes applied. Previously called VnetRouteAllEnabled.
    :vartype application_traffic: bool
    :ivar content_share_traffic: Enables accessing content over virtual network. Previously called
     VnetContentShareEnabled.
    :vartype content_share_traffic: bool
    :ivar image_pull_traffic: Enables pulling image over Virtual Network. Previously called
     VnetImagePullEnabled.
    :vartype image_pull_traffic: bool
    :ivar backup_restore_traffic: Enables Backup and Restore operations over virtual network.
     Previously called VnetBackupRestoreEnabled.
    :vartype backup_restore_traffic: bool
    """

    all_traffic: Optional[bool] = rest_field(
        name="allTraffic", visibility=["read", "create", "update", "delete", "query"]
    )
    """Enables all other routing options defined in OutboundVnetRouting if this setting is set to
     true."""
    application_traffic: Optional[bool] = rest_field(
        name="applicationTraffic", visibility=["read", "create", "update", "delete", "query"]
    )
    """This causes all outbound traffic to have Virtual Network Security Groups and User Defined
     Routes applied. Previously called VnetRouteAllEnabled."""
    content_share_traffic: Optional[bool] = rest_field(
        name="contentShareTraffic", visibility=["read", "create", "update", "delete", "query"]
    )
    """Enables accessing content over virtual network. Previously called VnetContentShareEnabled."""
    image_pull_traffic: Optional[bool] = rest_field(
        name="imagePullTraffic", visibility=["read", "create", "update", "delete", "query"]
    )
    """Enables pulling image over Virtual Network. Previously called VnetImagePullEnabled."""
    backup_restore_traffic: Optional[bool] = rest_field(
        name="backupRestoreTraffic", visibility=["read", "create", "update", "delete", "query"]
    )
    """Enables Backup and Restore operations over virtual network. Previously called
     VnetBackupRestoreEnabled."""

    @overload
    def __init__(
        self,
        *,
        all_traffic: Optional[bool] = None,
        application_traffic: Optional[bool] = None,
        content_share_traffic: Optional[bool] = None,
        image_pull_traffic: Optional[bool] = None,
        backup_restore_traffic: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PerfMonResponse(_Model):
    """Performance monitor API response.

    :ivar code: The response code.
    :vartype code: str
    :ivar message: The message.
    :vartype message: str
    :ivar data: The performance monitor counters.
    :vartype data: ~azure.mgmt.web.models.PerfMonSet
    """

    code: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The response code."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The message."""
    data: Optional["_models.PerfMonSet"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The performance monitor counters."""

    @overload
    def __init__(
        self,
        *,
        code: Optional[str] = None,
        message: Optional[str] = None,
        data: Optional["_models.PerfMonSet"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PerfMonSample(_Model):
    """Performance monitor sample in a set.

    :ivar time: Point in time for which counter was measured.
    :vartype time: ~datetime.datetime
    :ivar instance_name: Name of the server on which the measurement is made.
    :vartype instance_name: str
    :ivar value: Value of counter at a certain time.
    :vartype value: float
    """

    time: Optional[datetime.datetime] = rest_field(
        visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Point in time for which counter was measured."""
    instance_name: Optional[str] = rest_field(
        name="instanceName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Name of the server on which the measurement is made."""
    value: Optional[float] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Value of counter at a certain time."""

    @overload
    def __init__(
        self,
        *,
        time: Optional[datetime.datetime] = None,
        instance_name: Optional[str] = None,
        value: Optional[float] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PerfMonSet(_Model):
    """Metric information.

    :ivar name: Unique key name of the counter.
    :vartype name: str
    :ivar start_time: Start time of the period.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: End time of the period.
    :vartype end_time: ~datetime.datetime
    :ivar time_grain: Presented time grain.
    :vartype time_grain: str
    :ivar values_property: Collection of workers that are active during this time.
    :vartype values_property: list[~azure.mgmt.web.models.PerfMonSample]
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Unique key name of the counter."""
    start_time: Optional[datetime.datetime] = rest_field(
        name="startTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Start time of the period."""
    end_time: Optional[datetime.datetime] = rest_field(
        name="endTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """End time of the period."""
    time_grain: Optional[str] = rest_field(name="timeGrain", visibility=["read", "create", "update", "delete", "query"])
    """Presented time grain."""
    values_property: Optional[list["_models.PerfMonSample"]] = rest_field(
        name="values", visibility=["read", "create", "update", "delete", "query"], original_tsp_name="values"
    )
    """Collection of workers that are active during this time."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        time_grain: Optional[str] = None,
        values_property: Optional[list["_models.PerfMonSample"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PremierAddOn(TrackedResource):
    """Premier add-on.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: PremierAddOn resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.PremierAddOnProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.PremierAddOnProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """PremierAddOn resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["sku", "product", "vendor", "marketplace_publisher", "marketplace_offer"]

    @overload
    def __init__(
        self,
        *,
        location: str,
        tags: Optional[dict[str, str]] = None,
        properties: Optional["_models.PremierAddOnProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class PremierAddOnOffer(ProxyOnlyResource):
    """Premier add-on offer.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: PremierAddOnOffer resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.PremierAddOnOfferProperties
    """

    properties: Optional["_models.PremierAddOnOfferProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """PremierAddOnOffer resource specific properties."""

    __flattened_items = [
        "sku",
        "product",
        "vendor",
        "promo_code_required",
        "quota",
        "web_hosting_plan_restrictions",
        "privacy_policy_url",
        "legal_terms_url",
        "marketplace_publisher",
        "marketplace_offer",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.PremierAddOnOfferProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class PremierAddOnOfferProperties(_Model):
    """PremierAddOnOffer resource specific properties.

    :ivar sku: Premier add on SKU.
    :vartype sku: str
    :ivar product: Premier add on offer Product.
    :vartype product: str
    :ivar vendor: Premier add on offer Vendor.
    :vartype vendor: str
    :ivar promo_code_required: <code>true</code> if promotion code is required; otherwise,
     <code>false</code>.
    :vartype promo_code_required: bool
    :ivar quota: Premier add on offer Quota.
    :vartype quota: int
    :ivar web_hosting_plan_restrictions: App Service plans this offer is restricted to. Known
     values are: "None", "Free", "Shared", "Basic", "Standard", and "Premium".
    :vartype web_hosting_plan_restrictions: str or
     ~azure.mgmt.web.models.AppServicePlanRestrictions
    :ivar privacy_policy_url: Privacy policy URL.
    :vartype privacy_policy_url: str
    :ivar legal_terms_url: Legal terms URL.
    :vartype legal_terms_url: str
    :ivar marketplace_publisher: Marketplace publisher.
    :vartype marketplace_publisher: str
    :ivar marketplace_offer: Marketplace offer.
    :vartype marketplace_offer: str
    """

    sku: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Premier add on SKU."""
    product: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Premier add on offer Product."""
    vendor: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Premier add on offer Vendor."""
    promo_code_required: Optional[bool] = rest_field(
        name="promoCodeRequired", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if promotion code is required; otherwise, <code>false</code>."""
    quota: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Premier add on offer Quota."""
    web_hosting_plan_restrictions: Optional[Union[str, "_models.AppServicePlanRestrictions"]] = rest_field(
        name="webHostingPlanRestrictions", visibility=["read", "create", "update", "delete", "query"]
    )
    """App Service plans this offer is restricted to. Known values are: \"None\", \"Free\",
     \"Shared\", \"Basic\", \"Standard\", and \"Premium\"."""
    privacy_policy_url: Optional[str] = rest_field(
        name="privacyPolicyUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """Privacy policy URL."""
    legal_terms_url: Optional[str] = rest_field(
        name="legalTermsUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """Legal terms URL."""
    marketplace_publisher: Optional[str] = rest_field(
        name="marketplacePublisher", visibility=["read", "create", "update", "delete", "query"]
    )
    """Marketplace publisher."""
    marketplace_offer: Optional[str] = rest_field(
        name="marketplaceOffer", visibility=["read", "create", "update", "delete", "query"]
    )
    """Marketplace offer."""

    @overload
    def __init__(
        self,
        *,
        sku: Optional[str] = None,
        product: Optional[str] = None,
        vendor: Optional[str] = None,
        promo_code_required: Optional[bool] = None,
        quota: Optional[int] = None,
        web_hosting_plan_restrictions: Optional[Union[str, "_models.AppServicePlanRestrictions"]] = None,
        privacy_policy_url: Optional[str] = None,
        legal_terms_url: Optional[str] = None,
        marketplace_publisher: Optional[str] = None,
        marketplace_offer: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PremierAddOnPatchResource(ProxyOnlyResource):
    """ARM resource for a PremierAddOn.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: PremierAddOnPatchResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.PremierAddOnPatchResourceProperties
    """

    properties: Optional["_models.PremierAddOnPatchResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """PremierAddOnPatchResource resource specific properties."""

    __flattened_items = ["sku", "product", "vendor", "marketplace_publisher", "marketplace_offer"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.PremierAddOnPatchResourceProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class PremierAddOnPatchResourceProperties(_Model):
    """PremierAddOnPatchResource resource specific properties.

    :ivar sku: Premier add on SKU.
    :vartype sku: str
    :ivar product: Premier add on Product.
    :vartype product: str
    :ivar vendor: Premier add on Vendor.
    :vartype vendor: str
    :ivar marketplace_publisher: Premier add on Marketplace publisher.
    :vartype marketplace_publisher: str
    :ivar marketplace_offer: Premier add on Marketplace offer.
    :vartype marketplace_offer: str
    """

    sku: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Premier add on SKU."""
    product: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Premier add on Product."""
    vendor: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Premier add on Vendor."""
    marketplace_publisher: Optional[str] = rest_field(
        name="marketplacePublisher", visibility=["read", "create", "update", "delete", "query"]
    )
    """Premier add on Marketplace publisher."""
    marketplace_offer: Optional[str] = rest_field(
        name="marketplaceOffer", visibility=["read", "create", "update", "delete", "query"]
    )
    """Premier add on Marketplace offer."""

    @overload
    def __init__(
        self,
        *,
        sku: Optional[str] = None,
        product: Optional[str] = None,
        vendor: Optional[str] = None,
        marketplace_publisher: Optional[str] = None,
        marketplace_offer: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PremierAddOnProperties(_Model):
    """PremierAddOn resource specific properties.

    :ivar sku: Premier add on SKU.
    :vartype sku: str
    :ivar product: Premier add on Product.
    :vartype product: str
    :ivar vendor: Premier add on Vendor.
    :vartype vendor: str
    :ivar marketplace_publisher: Premier add on Marketplace publisher.
    :vartype marketplace_publisher: str
    :ivar marketplace_offer: Premier add on Marketplace offer.
    :vartype marketplace_offer: str
    """

    sku: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Premier add on SKU."""
    product: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Premier add on Product."""
    vendor: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Premier add on Vendor."""
    marketplace_publisher: Optional[str] = rest_field(
        name="marketplacePublisher", visibility=["read", "create", "update", "delete", "query"]
    )
    """Premier add on Marketplace publisher."""
    marketplace_offer: Optional[str] = rest_field(
        name="marketplaceOffer", visibility=["read", "create", "update", "delete", "query"]
    )
    """Premier add on Marketplace offer."""

    @overload
    def __init__(
        self,
        *,
        sku: Optional[str] = None,
        product: Optional[str] = None,
        vendor: Optional[str] = None,
        marketplace_publisher: Optional[str] = None,
        marketplace_offer: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PrivateAccess(ProxyResource):
    """Description of the parameters of Private Access for a Web Site.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: PrivateAccess resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.PrivateAccessProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.PrivateAccessProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """PrivateAccess resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["enabled", "virtual_networks"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.PrivateAccessProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class PrivateAccessProperties(_Model):
    """PrivateAccess resource specific properties.

    :ivar enabled: Whether private access is enabled or not.
    :vartype enabled: bool
    :ivar virtual_networks: The Virtual Networks (and subnets) allowed to access the site
     privately.
    :vartype virtual_networks: list[~azure.mgmt.web.models.PrivateAccessVirtualNetwork]
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Whether private access is enabled or not."""
    virtual_networks: Optional[list["_models.PrivateAccessVirtualNetwork"]] = rest_field(
        name="virtualNetworks", visibility=["read", "create", "update", "delete", "query"]
    )
    """The Virtual Networks (and subnets) allowed to access the site privately."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        virtual_networks: Optional[list["_models.PrivateAccessVirtualNetwork"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PrivateAccessSubnet(_Model):
    """Description of a Virtual Network subnet that is useable for private site access.

    :ivar name: The name of the subnet.
    :vartype name: str
    :ivar key: The key (ID) of the subnet.
    :vartype key: int
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The name of the subnet."""
    key: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The key (ID) of the subnet."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        key: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PrivateAccessVirtualNetwork(_Model):
    """Description of a Virtual Network that is useable for private site access.

    :ivar name: The name of the Virtual Network.
    :vartype name: str
    :ivar key: The key (ID) of the Virtual Network.
    :vartype key: int
    :ivar resource_id: The ARM uri of the Virtual Network.
    :vartype resource_id: str
    :ivar subnets: A List of subnets that access is allowed to on this Virtual Network. An empty
     array (but not null) is interpreted to mean that all subnets are allowed within this Virtual
     Network.
    :vartype subnets: list[~azure.mgmt.web.models.PrivateAccessSubnet]
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The name of the Virtual Network."""
    key: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The key (ID) of the Virtual Network."""
    resource_id: Optional[str] = rest_field(
        name="resourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The ARM uri of the Virtual Network."""
    subnets: Optional[list["_models.PrivateAccessSubnet"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """A List of subnets that access is allowed to on this Virtual Network. An empty array (but not
     null) is interpreted to mean that all subnets are allowed within this Virtual Network."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        key: Optional[int] = None,
        resource_id: Optional[str] = None,
        subnets: Optional[list["_models.PrivateAccessSubnet"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PrivateLinkConnectionState(_Model):
    """The state of a private link connection.

    :ivar status: Status of a private link connection.
    :vartype status: str
    :ivar description: Description of a private link connection.
    :vartype description: str
    :ivar actions_required: ActionsRequired for a private link connection.
    :vartype actions_required: str
    """

    status: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Status of a private link connection."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Description of a private link connection."""
    actions_required: Optional[str] = rest_field(
        name="actionsRequired", visibility=["read", "create", "update", "delete", "query"]
    )
    """ActionsRequired for a private link connection."""

    @overload
    def __init__(
        self,
        *,
        status: Optional[str] = None,
        description: Optional[str] = None,
        actions_required: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PrivateLinkResource(_Model):
    """A private link resource.

    :ivar id: Required.
    :vartype id: str
    :ivar name: Name of a private link resource. Required.
    :vartype name: str
    :ivar type: Required.
    :vartype type: str
    :ivar properties: Properties of a private link resource. Required.
    :vartype properties: ~azure.mgmt.web.models.PrivateLinkResourceProperties
    """

    id: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Required."""
    name: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of a private link resource. Required."""
    type: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Required."""
    properties: "_models.PrivateLinkResourceProperties" = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Properties of a private link resource. Required."""

    @overload
    def __init__(
        self,
        *,
        id: str,  # pylint: disable=redefined-builtin
        name: str,
        type: str,
        properties: "_models.PrivateLinkResourceProperties",
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PrivateLinkResourceProperties(_Model):
    """Properties of a private link resource.

    :ivar group_id: GroupId of a private link resource.
    :vartype group_id: str
    :ivar required_members: RequiredMembers of a private link resource.
    :vartype required_members: list[str]
    :ivar required_zone_names: RequiredZoneNames of a private link resource.
    :vartype required_zone_names: list[str]
    """

    group_id: Optional[str] = rest_field(name="groupId", visibility=["read"])
    """GroupId of a private link resource."""
    required_members: Optional[list[str]] = rest_field(name="requiredMembers", visibility=["read"])
    """RequiredMembers of a private link resource."""
    required_zone_names: Optional[list[str]] = rest_field(name="requiredZoneNames", visibility=["read"])
    """RequiredZoneNames of a private link resource."""


class PrivateLinkResourcesWrapper(_Model):
    """Wrapper for a collection of private link resources.

    :ivar value: Required.
    :vartype value: list[~azure.mgmt.web.models.PrivateLinkResource]
    """

    value: list["_models.PrivateLinkResource"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Required."""

    @overload
    def __init__(
        self,
        *,
        value: list["_models.PrivateLinkResource"],
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ProcessInfo(ProxyResource):
    """Process Information.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: ProcessInfo resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.ProcessInfoProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.ProcessInfoProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """ProcessInfo resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "identifier",
        "deployment_name",
        "href",
        "minidump",
        "is_profile_running",
        "is_iis_profile_running",
        "iis_profile_timeout_in_seconds",
        "parent",
        "children",
        "threads",
        "open_file_handles",
        "modules",
        "file_name",
        "command_line",
        "user_name",
        "handle_count",
        "module_count",
        "thread_count",
        "start_time",
        "total_cpu_time",
        "user_cpu_time",
        "privileged_cpu_time",
        "working_set",
        "peak_working_set",
        "private_memory",
        "virtual_memory",
        "peak_virtual_memory",
        "paged_system_memory",
        "non_paged_system_memory",
        "paged_memory",
        "peak_paged_memory",
        "time_stamp",
        "environment_variables",
        "is_scm_site",
        "is_webjob",
        "description",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.ProcessInfoProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class ProcessInfoProperties(_Model):
    """ProcessInfo resource specific properties.

    :ivar identifier: ARM Identifier for deployment.
    :vartype identifier: int
    :ivar deployment_name: Deployment name.
    :vartype deployment_name: str
    :ivar href: HRef URI.
    :vartype href: str
    :ivar minidump: Minidump URI.
    :vartype minidump: str
    :ivar is_profile_running: Is profile running?.
    :vartype is_profile_running: bool
    :ivar is_iis_profile_running: Is the IIS Profile running?.
    :vartype is_iis_profile_running: bool
    :ivar iis_profile_timeout_in_seconds: IIS Profile timeout (seconds).
    :vartype iis_profile_timeout_in_seconds: float
    :ivar parent: Parent process.
    :vartype parent: str
    :ivar children: Child process list.
    :vartype children: list[str]
    :ivar threads: Thread list.
    :vartype threads: list[~azure.mgmt.web.models.ProcessThreadInfo]
    :ivar open_file_handles: List of open files.
    :vartype open_file_handles: list[str]
    :ivar modules: List of modules.
    :vartype modules: list[~azure.mgmt.web.models.ProcessModuleInfo]
    :ivar file_name: File name of this process.
    :vartype file_name: str
    :ivar command_line: Command line.
    :vartype command_line: str
    :ivar user_name: User name.
    :vartype user_name: str
    :ivar handle_count: Handle count.
    :vartype handle_count: int
    :ivar module_count: Module count.
    :vartype module_count: int
    :ivar thread_count: Thread count.
    :vartype thread_count: int
    :ivar start_time: Start time.
    :vartype start_time: ~datetime.datetime
    :ivar total_cpu_time: Total CPU time.
    :vartype total_cpu_time: str
    :ivar user_cpu_time: User CPU time.
    :vartype user_cpu_time: str
    :ivar privileged_cpu_time: Privileged CPU time.
    :vartype privileged_cpu_time: str
    :ivar working_set: Working set.
    :vartype working_set: int
    :ivar peak_working_set: Peak working set.
    :vartype peak_working_set: int
    :ivar private_memory: Private memory size.
    :vartype private_memory: int
    :ivar virtual_memory: Virtual memory size.
    :vartype virtual_memory: int
    :ivar peak_virtual_memory: Peak virtual memory usage.
    :vartype peak_virtual_memory: int
    :ivar paged_system_memory: Paged system memory.
    :vartype paged_system_memory: int
    :ivar non_paged_system_memory: Non-paged system memory.
    :vartype non_paged_system_memory: int
    :ivar paged_memory: Paged memory.
    :vartype paged_memory: int
    :ivar peak_paged_memory: Peak paged memory.
    :vartype peak_paged_memory: int
    :ivar time_stamp: Time stamp.
    :vartype time_stamp: ~datetime.datetime
    :ivar environment_variables: List of environment variables.
    :vartype environment_variables: dict[str, str]
    :ivar is_scm_site: Is this the SCM site?.
    :vartype is_scm_site: bool
    :ivar is_webjob: Is this a Web Job?.
    :vartype is_webjob: bool
    :ivar description: Description of process.
    :vartype description: str
    """

    identifier: Optional[int] = rest_field(visibility=["read"])
    """ARM Identifier for deployment."""
    deployment_name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Deployment name."""
    href: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """HRef URI."""
    minidump: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Minidump URI."""
    is_profile_running: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Is profile running?."""
    is_iis_profile_running: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Is the IIS Profile running?."""
    iis_profile_timeout_in_seconds: Optional[float] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """IIS Profile timeout (seconds)."""
    parent: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Parent process."""
    children: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Child process list."""
    threads: Optional[list["_models.ProcessThreadInfo"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Thread list."""
    open_file_handles: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """List of open files."""
    modules: Optional[list["_models.ProcessModuleInfo"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """List of modules."""
    file_name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """File name of this process."""
    command_line: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Command line."""
    user_name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """User name."""
    handle_count: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Handle count."""
    module_count: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Module count."""
    thread_count: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Thread count."""
    start_time: Optional[datetime.datetime] = rest_field(
        visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Start time."""
    total_cpu_time: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Total CPU time."""
    user_cpu_time: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """User CPU time."""
    privileged_cpu_time: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Privileged CPU time."""
    working_set: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Working set."""
    peak_working_set: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Peak working set."""
    private_memory: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Private memory size."""
    virtual_memory: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Virtual memory size."""
    peak_virtual_memory: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Peak virtual memory usage."""
    paged_system_memory: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Paged system memory."""
    non_paged_system_memory: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Non-paged system memory."""
    paged_memory: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Paged memory."""
    peak_paged_memory: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Peak paged memory."""
    time_stamp: Optional[datetime.datetime] = rest_field(
        visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Time stamp."""
    environment_variables: Optional[dict[str, str]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """List of environment variables."""
    is_scm_site: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Is this the SCM site?."""
    is_webjob: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Is this a Web Job?."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Description of process."""

    @overload
    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        deployment_name: Optional[str] = None,
        href: Optional[str] = None,
        minidump: Optional[str] = None,
        is_profile_running: Optional[bool] = None,
        is_iis_profile_running: Optional[bool] = None,
        iis_profile_timeout_in_seconds: Optional[float] = None,
        parent: Optional[str] = None,
        children: Optional[list[str]] = None,
        threads: Optional[list["_models.ProcessThreadInfo"]] = None,
        open_file_handles: Optional[list[str]] = None,
        modules: Optional[list["_models.ProcessModuleInfo"]] = None,
        file_name: Optional[str] = None,
        command_line: Optional[str] = None,
        user_name: Optional[str] = None,
        handle_count: Optional[int] = None,
        module_count: Optional[int] = None,
        thread_count: Optional[int] = None,
        start_time: Optional[datetime.datetime] = None,
        total_cpu_time: Optional[str] = None,
        user_cpu_time: Optional[str] = None,
        privileged_cpu_time: Optional[str] = None,
        working_set: Optional[int] = None,
        peak_working_set: Optional[int] = None,
        private_memory: Optional[int] = None,
        virtual_memory: Optional[int] = None,
        peak_virtual_memory: Optional[int] = None,
        paged_system_memory: Optional[int] = None,
        non_paged_system_memory: Optional[int] = None,
        paged_memory: Optional[int] = None,
        peak_paged_memory: Optional[int] = None,
        time_stamp: Optional[datetime.datetime] = None,
        environment_variables: Optional[dict[str, str]] = None,
        is_scm_site: Optional[bool] = None,
        is_webjob: Optional[bool] = None,
        description: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ProcessModuleInfo(ProxyResource):
    """Process Module Information.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: ProcessModuleInfo resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.ProcessModuleInfoProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.ProcessModuleInfoProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """ProcessModuleInfo resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "base_address",
        "file_name",
        "href",
        "file_path",
        "module_memory_size",
        "file_version",
        "file_description",
        "product",
        "product_version",
        "is_debug",
        "language",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.ProcessModuleInfoProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class ProcessModuleInfoProperties(_Model):
    """ProcessModuleInfo resource specific properties.

    :ivar base_address: Base address. Used as module identifier in ARM resource URI.
    :vartype base_address: str
    :ivar file_name: File name.
    :vartype file_name: str
    :ivar href: HRef URI.
    :vartype href: str
    :ivar file_path: File path.
    :vartype file_path: str
    :ivar module_memory_size: Module memory size.
    :vartype module_memory_size: int
    :ivar file_version: File version.
    :vartype file_version: str
    :ivar file_description: File description.
    :vartype file_description: str
    :ivar product: Product name.
    :vartype product: str
    :ivar product_version: Product version.
    :vartype product_version: str
    :ivar is_debug: Is debug?.
    :vartype is_debug: bool
    :ivar language: Module language (locale).
    :vartype language: str
    """

    base_address: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Base address. Used as module identifier in ARM resource URI."""
    file_name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """File name."""
    href: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """HRef URI."""
    file_path: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """File path."""
    module_memory_size: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Module memory size."""
    file_version: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """File version."""
    file_description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """File description."""
    product: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Product name."""
    product_version: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Product version."""
    is_debug: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Is debug?."""
    language: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Module language (locale)."""

    @overload
    def __init__(
        self,
        *,
        base_address: Optional[str] = None,
        file_name: Optional[str] = None,
        href: Optional[str] = None,
        file_path: Optional[str] = None,
        module_memory_size: Optional[int] = None,
        file_version: Optional[str] = None,
        file_description: Optional[str] = None,
        product: Optional[str] = None,
        product_version: Optional[str] = None,
        is_debug: Optional[bool] = None,
        language: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ProcessThreadInfo(ProxyOnlyResource):
    """Process Thread Information.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: ProcessThreadInfo resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.ProcessThreadInfoProperties
    """

    properties: Optional["_models.ProcessThreadInfoProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """ProcessThreadInfo resource specific properties."""

    __flattened_items = [
        "identifier",
        "href",
        "process",
        "start_address",
        "current_priority",
        "priority_level",
        "base_priority",
        "start_time",
        "total_processor_time",
        "user_processor_time",
        "state",
        "wait_reason",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.ProcessThreadInfoProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class ProcessThreadInfoProperties(_Model):
    """ProcessThreadInfo resource specific properties.

    :ivar identifier: Site extension ID.
    :vartype identifier: int
    :ivar href: HRef URI.
    :vartype href: str
    :ivar process: Process URI.
    :vartype process: str
    :ivar start_address: Start address.
    :vartype start_address: str
    :ivar current_priority: Current thread priority.
    :vartype current_priority: int
    :ivar priority_level: Thread priority level.
    :vartype priority_level: str
    :ivar base_priority: Base priority.
    :vartype base_priority: int
    :ivar start_time: Start time.
    :vartype start_time: ~datetime.datetime
    :ivar total_processor_time: Total processor time.
    :vartype total_processor_time: str
    :ivar user_processor_time: User processor time.
    :vartype user_processor_time: str
    :ivar state: Thread state.
    :vartype state: str
    :ivar wait_reason: Wait reason.
    :vartype wait_reason: str
    """

    identifier: Optional[int] = rest_field(visibility=["read"])
    """Site extension ID."""
    href: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """HRef URI."""
    process: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Process URI."""
    start_address: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Start address."""
    current_priority: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Current thread priority."""
    priority_level: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Thread priority level."""
    base_priority: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Base priority."""
    start_time: Optional[datetime.datetime] = rest_field(
        visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Start time."""
    total_processor_time: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Total processor time."""
    user_processor_time: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """User processor time."""
    state: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Thread state."""
    wait_reason: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Wait reason."""

    @overload
    def __init__(
        self,
        *,
        href: Optional[str] = None,
        process: Optional[str] = None,
        start_address: Optional[str] = None,
        current_priority: Optional[int] = None,
        priority_level: Optional[str] = None,
        base_priority: Optional[int] = None,
        start_time: Optional[datetime.datetime] = None,
        total_processor_time: Optional[str] = None,
        user_processor_time: Optional[str] = None,
        state: Optional[str] = None,
        wait_reason: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PublicCertificate(ProxyResource):
    """Public certificate object.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: PublicCertificate resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.PublicCertificateProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.PublicCertificateProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """PublicCertificate resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["blob", "public_certificate_location", "thumbprint"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.PublicCertificateProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class PublicCertificateProperties(_Model):
    """PublicCertificate resource specific properties.

    :ivar blob: Public Certificate byte array.
    :vartype blob: bytes
    :ivar public_certificate_location: Public Certificate Location. Known values are:
     "CurrentUserMy", "LocalMachineMy", and "Unknown".
    :vartype public_certificate_location: str or ~azure.mgmt.web.models.PublicCertificateLocation
    :ivar thumbprint: Certificate Thumbprint.
    :vartype thumbprint: str
    """

    blob: Optional[bytes] = rest_field(visibility=["read", "create", "update", "delete", "query"], format="base64")
    """Public Certificate byte array."""
    public_certificate_location: Optional[Union[str, "_models.PublicCertificateLocation"]] = rest_field(
        name="publicCertificateLocation", visibility=["read", "create", "update", "delete", "query"]
    )
    """Public Certificate Location. Known values are: \"CurrentUserMy\", \"LocalMachineMy\", and
     \"Unknown\"."""
    thumbprint: Optional[str] = rest_field(visibility=["read"])
    """Certificate Thumbprint."""

    @overload
    def __init__(
        self,
        *,
        blob: Optional[bytes] = None,
        public_certificate_location: Optional[Union[str, "_models.PublicCertificateLocation"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class PushSettings(ProxyOnlyResource):
    """Push settings for the App.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: PushSettings resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.PushSettingsProperties
    """

    properties: Optional["_models.PushSettingsProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """PushSettings resource specific properties."""

    __flattened_items = ["is_push_enabled", "tag_whitelist_json", "tags_requiring_auth", "dynamic_tags_json"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.PushSettingsProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class PushSettingsProperties(_Model):
    """PushSettings resource specific properties.

    :ivar is_push_enabled: Gets or sets a flag indicating whether the Push endpoint is enabled.
     Required.
    :vartype is_push_enabled: bool
    :ivar tag_whitelist_json: Gets or sets a JSON string containing a list of tags that are
     whitelisted for use by the push registration endpoint.
    :vartype tag_whitelist_json: str
    :ivar tags_requiring_auth: Gets or sets a JSON string containing a list of tags that require
     user authentication to be used in the push registration endpoint. Tags can consist of
     alphanumeric characters and the following: '_', '@', '#', '.', ':', '-'. Validation should be
     performed at the PushRequestHandler.
    :vartype tags_requiring_auth: str
    :ivar dynamic_tags_json: Gets or sets a JSON string containing a list of dynamic tags that will
     be evaluated from user claims in the push registration endpoint.
    :vartype dynamic_tags_json: str
    """

    is_push_enabled: bool = rest_field(name="isPushEnabled", visibility=["read", "create", "update", "delete", "query"])
    """Gets or sets a flag indicating whether the Push endpoint is enabled. Required."""
    tag_whitelist_json: Optional[str] = rest_field(
        name="tagWhitelistJson", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets or sets a JSON string containing a list of tags that are whitelisted for use by the push
     registration endpoint."""
    tags_requiring_auth: Optional[str] = rest_field(
        name="tagsRequiringAuth", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets or sets a JSON string containing a list of tags that require user authentication to be
     used in the push registration endpoint. Tags can consist of alphanumeric characters and the
     following: '_', '@', '#', '.', ':', '-'. Validation should be performed at the
     PushRequestHandler."""
    dynamic_tags_json: Optional[str] = rest_field(
        name="dynamicTagsJson", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets or sets a JSON string containing a list of dynamic tags that will be evaluated from user
     claims in the push registration endpoint."""

    @overload
    def __init__(
        self,
        *,
        is_push_enabled: bool,
        tag_whitelist_json: Optional[str] = None,
        tags_requiring_auth: Optional[str] = None,
        dynamic_tags_json: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class QueryUtterancesResult(_Model):
    """Result for utterances query.

    :ivar sample_utterance: A sample utterance.
    :vartype sample_utterance: ~azure.mgmt.web.models.SampleUtterance
    :ivar score: Score of a sample utterance.
    :vartype score: float
    """

    sample_utterance: Optional["_models.SampleUtterance"] = rest_field(
        name="sampleUtterance", visibility=["read", "create", "update", "delete", "query"]
    )
    """A sample utterance."""
    score: Optional[float] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Score of a sample utterance."""

    @overload
    def __init__(
        self,
        *,
        sample_utterance: Optional["_models.SampleUtterance"] = None,
        score: Optional[float] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class QueryUtterancesResults(_Model):
    """Suggested utterances where the detector can be applicable.

    :ivar query: Search Query.
    :vartype query: str
    :ivar results: Array of utterance results for search query.
    :vartype results: list[~azure.mgmt.web.models.QueryUtterancesResult]
    """

    query: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Search Query."""
    results: Optional[list["_models.QueryUtterancesResult"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Array of utterance results for search query."""

    @overload
    def __init__(
        self,
        *,
        query: Optional[str] = None,
        results: Optional[list["_models.QueryUtterancesResult"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RampUpRule(_Model):
    """Routing rules for ramp up testing. This rule allows to redirect static traffic % to a slot or
    to gradually change routing % based on performance.

    :ivar action_host_name: Hostname of a slot to which the traffic will be redirected if decided
     to. E.g. myapp-stage.azurewebsites.net.
    :vartype action_host_name: str
    :ivar reroute_percentage: Percentage of the traffic which will be redirected to
     <code>ActionHostName</code>.
    :vartype reroute_percentage: float
    :ivar change_step: In auto ramp up scenario this is the step to add/remove from
     <code>ReroutePercentage</code> until it reaches \\n<code>MinReroutePercentage</code> or
     <code>MaxReroutePercentage</code>. Site metrics are checked every N minutes specified in
     <code>ChangeIntervalInMinutes</code>.\\nCustom decision algorithm can be provided in
     TiPCallback site extension which URL can be specified in
     <code>ChangeDecisionCallbackUrl</code>.
    :vartype change_step: float
    :ivar change_interval_in_minutes: Specifies interval in minutes to reevaluate
     ReroutePercentage.
    :vartype change_interval_in_minutes: int
    :ivar min_reroute_percentage: Specifies lower boundary above which ReroutePercentage will stay.
    :vartype min_reroute_percentage: float
    :ivar max_reroute_percentage: Specifies upper boundary below which ReroutePercentage will stay.
    :vartype max_reroute_percentage: float
    :ivar change_decision_callback_url: Custom decision algorithm can be provided in TiPCallback
     site extension which URL can be specified.
    :vartype change_decision_callback_url: str
    :ivar name: Name of the routing rule. The recommended name would be to point to the slot which
     will receive the traffic in the experiment.
    :vartype name: str
    """

    action_host_name: Optional[str] = rest_field(
        name="actionHostName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Hostname of a slot to which the traffic will be redirected if decided to. E.g.
     myapp-stage.azurewebsites.net."""
    reroute_percentage: Optional[float] = rest_field(
        name="reroutePercentage", visibility=["read", "create", "update", "delete", "query"]
    )
    """Percentage of the traffic which will be redirected to <code>ActionHostName</code>."""
    change_step: Optional[float] = rest_field(
        name="changeStep", visibility=["read", "create", "update", "delete", "query"]
    )
    """In auto ramp up scenario this is the step to add/remove from <code>ReroutePercentage</code>
     until it reaches \n<code>MinReroutePercentage</code> or <code>MaxReroutePercentage</code>. Site
     metrics are checked every N minutes specified in <code>ChangeIntervalInMinutes</code>.\nCustom
     decision algorithm can be provided in TiPCallback site extension which URL can be specified in
     <code>ChangeDecisionCallbackUrl</code>."""
    change_interval_in_minutes: Optional[int] = rest_field(
        name="changeIntervalInMinutes", visibility=["read", "create", "update", "delete", "query"]
    )
    """Specifies interval in minutes to reevaluate ReroutePercentage."""
    min_reroute_percentage: Optional[float] = rest_field(
        name="minReroutePercentage", visibility=["read", "create", "update", "delete", "query"]
    )
    """Specifies lower boundary above which ReroutePercentage will stay."""
    max_reroute_percentage: Optional[float] = rest_field(
        name="maxReroutePercentage", visibility=["read", "create", "update", "delete", "query"]
    )
    """Specifies upper boundary below which ReroutePercentage will stay."""
    change_decision_callback_url: Optional[str] = rest_field(
        name="changeDecisionCallbackUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """Custom decision algorithm can be provided in TiPCallback site extension which URL can be
     specified."""
    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the routing rule. The recommended name would be to point to the slot which will receive
     the traffic in the experiment."""

    @overload
    def __init__(
        self,
        *,
        action_host_name: Optional[str] = None,
        reroute_percentage: Optional[float] = None,
        change_step: Optional[float] = None,
        change_interval_in_minutes: Optional[int] = None,
        min_reroute_percentage: Optional[float] = None,
        max_reroute_percentage: Optional[float] = None,
        change_decision_callback_url: Optional[str] = None,
        name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Recommendation(ProxyOnlyResource):
    """Represents a recommendation result generated by the recommendation engine.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: Recommendation resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.RecommendationProperties
    """

    properties: Optional["_models.RecommendationProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Recommendation resource specific properties."""

    __flattened_items = [
        "creation_time",
        "recommendation_id",
        "resource_id",
        "resource_scope",
        "rule_name",
        "display_name",
        "message",
        "level",
        "channels",
        "category_tags",
        "action_name",
        "enabled",
        "states",
        "start_time",
        "end_time",
        "next_notification_time",
        "notification_expiration_time",
        "notified_time",
        "score",
        "is_dynamic",
        "extension_name",
        "blade_name",
        "forward_link",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.RecommendationProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class RecommendationProperties(_Model):
    """Recommendation resource specific properties.

    :ivar creation_time: Timestamp when this instance was created.
    :vartype creation_time: ~datetime.datetime
    :ivar recommendation_id: A GUID value that each recommendation object is associated with.
    :vartype recommendation_id: str
    :ivar resource_id: Full ARM resource ID string that this recommendation object is associated
     with.
    :vartype resource_id: str
    :ivar resource_scope: Name of a resource type this recommendation applies, e.g. Subscription,
     ServerFarm, Site. Known values are: "ServerFarm", "Subscription", and "WebSite".
    :vartype resource_scope: str or ~azure.mgmt.web.models.ResourceScopeType
    :ivar rule_name: Unique name of the rule.
    :vartype rule_name: str
    :ivar display_name: UI friendly name of the rule (may not be unique).
    :vartype display_name: str
    :ivar message: Recommendation text.
    :vartype message: str
    :ivar level: Level indicating how critical this recommendation can impact. Known values are:
     "Critical", "Warning", "Information", and "NonUrgentSuggestion".
    :vartype level: str or ~azure.mgmt.web.models.NotificationLevel
    :ivar channels: List of channels that this recommendation can apply. Known values are:
     "Notification", "Api", "Email", "Webhook", and "All".
    :vartype channels: str or ~azure.mgmt.web.models.Channels
    :ivar category_tags: The list of category tags that this recommendation belongs to.
    :vartype category_tags: list[str]
    :ivar action_name: Name of action recommended by this object.
    :vartype action_name: str
    :ivar enabled: True if this recommendation is still valid (i.e. "actionable"). False if it is
     invalid.
    :vartype enabled: int
    :ivar states: The list of states of this recommendation. If it's null then it should be
     considered "Active".
    :vartype states: list[str]
    :ivar start_time: The beginning time in UTC of a range that the recommendation refers to.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: The end time in UTC of a range that the recommendation refers to.
    :vartype end_time: ~datetime.datetime
    :ivar next_notification_time: When to notify this recommendation next in UTC. Null means that
     this will never be notified anymore.
    :vartype next_notification_time: ~datetime.datetime
    :ivar notification_expiration_time: Date and time in UTC when this notification expires.
    :vartype notification_expiration_time: ~datetime.datetime
    :ivar notified_time: Last timestamp in UTC this instance was actually notified. Null means that
     this recommendation hasn't been notified yet.
    :vartype notified_time: ~datetime.datetime
    :ivar score: A metric value measured by the rule.
    :vartype score: float
    :ivar is_dynamic: True if this is associated with a dynamically added rule.
    :vartype is_dynamic: bool
    :ivar extension_name: Extension name of the portal if exists.
    :vartype extension_name: str
    :ivar blade_name: Deep link to a blade on the portal.
    :vartype blade_name: str
    :ivar forward_link: Forward link to an external document associated with the rule.
    :vartype forward_link: str
    """

    creation_time: Optional[datetime.datetime] = rest_field(
        name="creationTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Timestamp when this instance was created."""
    recommendation_id: Optional[str] = rest_field(
        name="recommendationId", visibility=["read", "create", "update", "delete", "query"]
    )
    """A GUID value that each recommendation object is associated with."""
    resource_id: Optional[str] = rest_field(
        name="resourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Full ARM resource ID string that this recommendation object is associated with."""
    resource_scope: Optional[Union[str, "_models.ResourceScopeType"]] = rest_field(
        name="resourceScope", visibility=["read", "create", "update", "delete", "query"]
    )
    """Name of a resource type this recommendation applies, e.g. Subscription, ServerFarm, Site. Known
     values are: \"ServerFarm\", \"Subscription\", and \"WebSite\"."""
    rule_name: Optional[str] = rest_field(name="ruleName", visibility=["read", "create", "update", "delete", "query"])
    """Unique name of the rule."""
    display_name: Optional[str] = rest_field(
        name="displayName", visibility=["read", "create", "update", "delete", "query"]
    )
    """UI friendly name of the rule (may not be unique)."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Recommendation text."""
    level: Optional[Union[str, "_models.NotificationLevel"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Level indicating how critical this recommendation can impact. Known values are: \"Critical\",
     \"Warning\", \"Information\", and \"NonUrgentSuggestion\"."""
    channels: Optional[Union[str, "_models.Channels"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """List of channels that this recommendation can apply. Known values are: \"Notification\",
     \"Api\", \"Email\", \"Webhook\", and \"All\"."""
    category_tags: Optional[list[str]] = rest_field(name="categoryTags", visibility=["read"])
    """The list of category tags that this recommendation belongs to."""
    action_name: Optional[str] = rest_field(
        name="actionName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Name of action recommended by this object."""
    enabled: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """True if this recommendation is still valid (i.e. \"actionable\"). False if it is invalid."""
    states: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The list of states of this recommendation. If it's null then it should be considered
     \"Active\"."""
    start_time: Optional[datetime.datetime] = rest_field(
        name="startTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The beginning time in UTC of a range that the recommendation refers to."""
    end_time: Optional[datetime.datetime] = rest_field(
        name="endTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The end time in UTC of a range that the recommendation refers to."""
    next_notification_time: Optional[datetime.datetime] = rest_field(
        name="nextNotificationTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """When to notify this recommendation next in UTC. Null means that this will never be notified
     anymore."""
    notification_expiration_time: Optional[datetime.datetime] = rest_field(
        name="notificationExpirationTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Date and time in UTC when this notification expires."""
    notified_time: Optional[datetime.datetime] = rest_field(
        name="notifiedTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Last timestamp in UTC this instance was actually notified. Null means that this recommendation
     hasn't been notified yet."""
    score: Optional[float] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """A metric value measured by the rule."""
    is_dynamic: Optional[bool] = rest_field(
        name="isDynamic", visibility=["read", "create", "update", "delete", "query"]
    )
    """True if this is associated with a dynamically added rule."""
    extension_name: Optional[str] = rest_field(
        name="extensionName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Extension name of the portal if exists."""
    blade_name: Optional[str] = rest_field(name="bladeName", visibility=["read", "create", "update", "delete", "query"])
    """Deep link to a blade on the portal."""
    forward_link: Optional[str] = rest_field(
        name="forwardLink", visibility=["read", "create", "update", "delete", "query"]
    )
    """Forward link to an external document associated with the rule."""

    @overload
    def __init__(
        self,
        *,
        creation_time: Optional[datetime.datetime] = None,
        recommendation_id: Optional[str] = None,
        resource_id: Optional[str] = None,
        resource_scope: Optional[Union[str, "_models.ResourceScopeType"]] = None,
        rule_name: Optional[str] = None,
        display_name: Optional[str] = None,
        message: Optional[str] = None,
        level: Optional[Union[str, "_models.NotificationLevel"]] = None,
        channels: Optional[Union[str, "_models.Channels"]] = None,
        action_name: Optional[str] = None,
        enabled: Optional[int] = None,
        states: Optional[list[str]] = None,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        next_notification_time: Optional[datetime.datetime] = None,
        notification_expiration_time: Optional[datetime.datetime] = None,
        notified_time: Optional[datetime.datetime] = None,
        score: Optional[float] = None,
        is_dynamic: Optional[bool] = None,
        extension_name: Optional[str] = None,
        blade_name: Optional[str] = None,
        forward_link: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RecommendationRule(ProxyResource):
    """Represents a recommendation rule that the recommendation engine can perform.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: RecommendationRule resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.RecommendationRuleProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.RecommendationRuleProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """RecommendationRule resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "recommendation_name",
        "display_name",
        "message",
        "recommendation_id",
        "description",
        "action_name",
        "level",
        "channels",
        "category_tags",
        "is_dynamic",
        "extension_name",
        "blade_name",
        "forward_link",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.RecommendationRuleProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class RecommendationRuleProperties(_Model):
    """RecommendationRule resource specific properties.

    :ivar recommendation_name: Unique name of the rule.
    :vartype recommendation_name: str
    :ivar display_name: UI friendly name of the rule.
    :vartype display_name: str
    :ivar message: Localized name of the rule (Good for UI).
    :vartype message: str
    :ivar recommendation_id: Recommendation ID of an associated recommendation object tied to the
     rule, if exists. If such an object doesn't exist, it is set to null.
    :vartype recommendation_id: str
    :ivar description: Localized detailed description of the rule.
    :vartype description: str
    :ivar action_name: Name of action that is recommended by this rule in string.
    :vartype action_name: str
    :ivar level: Level of impact indicating how critical this rule is. Known values are:
     "Critical", "Warning", "Information", and "NonUrgentSuggestion".
    :vartype level: str or ~azure.mgmt.web.models.NotificationLevel
    :ivar channels: List of available channels that this rule applies. Known values are:
     "Notification", "Api", "Email", "Webhook", and "All".
    :vartype channels: str or ~azure.mgmt.web.models.Channels
    :ivar category_tags: The list of category tags that this recommendation rule belongs to.
    :vartype category_tags: list[str]
    :ivar is_dynamic: True if this is associated with a dynamically added rule.
    :vartype is_dynamic: bool
    :ivar extension_name: Extension name of the portal if exists. Applicable to dynamic rule only.
    :vartype extension_name: str
    :ivar blade_name: Deep link to a blade on the portal. Applicable to dynamic rule only.
    :vartype blade_name: str
    :ivar forward_link: Forward link to an external document associated with the rule. Applicable
     to dynamic rule only.
    :vartype forward_link: str
    """

    recommendation_name: Optional[str] = rest_field(
        name="recommendationName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Unique name of the rule."""
    display_name: Optional[str] = rest_field(
        name="displayName", visibility=["read", "create", "update", "delete", "query"]
    )
    """UI friendly name of the rule."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Localized name of the rule (Good for UI)."""
    recommendation_id: Optional[str] = rest_field(
        name="recommendationId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Recommendation ID of an associated recommendation object tied to the rule, if exists. If such
     an object doesn't exist, it is set to null."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Localized detailed description of the rule."""
    action_name: Optional[str] = rest_field(
        name="actionName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Name of action that is recommended by this rule in string."""
    level: Optional[Union[str, "_models.NotificationLevel"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Level of impact indicating how critical this rule is. Known values are: \"Critical\",
     \"Warning\", \"Information\", and \"NonUrgentSuggestion\"."""
    channels: Optional[Union[str, "_models.Channels"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """List of available channels that this rule applies. Known values are: \"Notification\", \"Api\",
     \"Email\", \"Webhook\", and \"All\"."""
    category_tags: Optional[list[str]] = rest_field(name="categoryTags", visibility=["read"])
    """The list of category tags that this recommendation rule belongs to."""
    is_dynamic: Optional[bool] = rest_field(
        name="isDynamic", visibility=["read", "create", "update", "delete", "query"]
    )
    """True if this is associated with a dynamically added rule."""
    extension_name: Optional[str] = rest_field(
        name="extensionName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Extension name of the portal if exists. Applicable to dynamic rule only."""
    blade_name: Optional[str] = rest_field(name="bladeName", visibility=["read", "create", "update", "delete", "query"])
    """Deep link to a blade on the portal. Applicable to dynamic rule only."""
    forward_link: Optional[str] = rest_field(
        name="forwardLink", visibility=["read", "create", "update", "delete", "query"]
    )
    """Forward link to an external document associated with the rule. Applicable to dynamic rule only."""

    @overload
    def __init__(
        self,
        *,
        recommendation_name: Optional[str] = None,
        display_name: Optional[str] = None,
        message: Optional[str] = None,
        recommendation_id: Optional[str] = None,
        description: Optional[str] = None,
        action_name: Optional[str] = None,
        level: Optional[Union[str, "_models.NotificationLevel"]] = None,
        channels: Optional[Union[str, "_models.Channels"]] = None,
        is_dynamic: Optional[bool] = None,
        extension_name: Optional[str] = None,
        blade_name: Optional[str] = None,
        forward_link: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RecurrenceSchedule(_Model):
    """The recurrence schedule.

    :ivar minutes: The minutes.
    :vartype minutes: list[int]
    :ivar hours: The hours.
    :vartype hours: list[int]
    :ivar week_days: The days of the week.
    :vartype week_days: list[str or ~azure.mgmt.web.models.DaysOfWeek]
    :ivar month_days: The month days.
    :vartype month_days: list[int]
    :ivar monthly_occurrences: The monthly occurrences.
    :vartype monthly_occurrences: list[~azure.mgmt.web.models.RecurrenceScheduleOccurrence]
    """

    minutes: Optional[list[int]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The minutes."""
    hours: Optional[list[int]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The hours."""
    week_days: Optional[list[Union[str, "_models.DaysOfWeek"]]] = rest_field(
        name="weekDays", visibility=["read", "create", "update", "delete", "query"]
    )
    """The days of the week."""
    month_days: Optional[list[int]] = rest_field(
        name="monthDays", visibility=["read", "create", "update", "delete", "query"]
    )
    """The month days."""
    monthly_occurrences: Optional[list["_models.RecurrenceScheduleOccurrence"]] = rest_field(
        name="monthlyOccurrences", visibility=["read", "create", "update", "delete", "query"]
    )
    """The monthly occurrences."""

    @overload
    def __init__(
        self,
        *,
        minutes: Optional[list[int]] = None,
        hours: Optional[list[int]] = None,
        week_days: Optional[list[Union[str, "_models.DaysOfWeek"]]] = None,
        month_days: Optional[list[int]] = None,
        monthly_occurrences: Optional[list["_models.RecurrenceScheduleOccurrence"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RecurrenceScheduleOccurrence(_Model):
    """The recurrence schedule occurrence.

    :ivar day: The day of the week. Known values are: "Sunday", "Monday", "Tuesday", "Wednesday",
     "Thursday", "Friday", and "Saturday".
    :vartype day: str or ~azure.mgmt.web.models.DayOfWeek
    :ivar occurrence: The occurrence.
    :vartype occurrence: int
    """

    day: Optional[Union[str, "_models.DayOfWeek"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The day of the week. Known values are: \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",
     \"Thursday\", \"Friday\", and \"Saturday\"."""
    occurrence: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The occurrence."""

    @overload
    def __init__(
        self,
        *,
        day: Optional[Union[str, "_models.DayOfWeek"]] = None,
        occurrence: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RegenerateActionParameter(_Model):
    """The access key regenerate action content.

    :ivar key_type: The key type. Known values are: "NotSpecified", "Primary", and "Secondary".
    :vartype key_type: str or ~azure.mgmt.web.models.KeyType
    """

    key_type: Optional[Union[str, "_models.KeyType"]] = rest_field(
        name="keyType", visibility=["read", "create", "update", "delete", "query"]
    )
    """The key type. Known values are: \"NotSpecified\", \"Primary\", and \"Secondary\"."""

    @overload
    def __init__(
        self,
        *,
        key_type: Optional[Union[str, "_models.KeyType"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RegistryAdapter(_Model):
    """Server farm registry adapter configuration.

    :ivar registry_key: Registry key for the adapter.
    :vartype registry_key: str
    :ivar type: Type of the registry adapter. Known values are: "Binary", "String",
     "Expand_String", "Multi_String", "DWord", and "QWord".
    :vartype type: str or ~azure.mgmt.web.models.RegistryAdapterType
    :ivar key_vault_secret_reference: Key vault reference to the value that will be placed in the
     registry location.
    :vartype key_vault_secret_reference: ~azure.mgmt.web.models.KeyVaultReferenceWithStatus
    """

    registry_key: Optional[str] = rest_field(
        name="registryKey", visibility=["read", "create", "update", "delete", "query"]
    )
    """Registry key for the adapter."""
    type: Optional[Union[str, "_models.RegistryAdapterType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Type of the registry adapter. Known values are: \"Binary\", \"String\", \"Expand_String\",
     \"Multi_String\", \"DWord\", and \"QWord\"."""
    key_vault_secret_reference: Optional["_models.KeyVaultReferenceWithStatus"] = rest_field(
        name="keyVaultSecretReference", visibility=["read", "create", "update", "delete", "query"]
    )
    """Key vault reference to the value that will be placed in the registry location."""

    @overload
    def __init__(
        self,
        *,
        registry_key: Optional[str] = None,
        type: Optional[Union[str, "_models.RegistryAdapterType"]] = None,
        key_vault_secret_reference: Optional["_models.KeyVaultReferenceWithStatus"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RelayServiceConnectionEntity(ProxyResource):
    """Hybrid Connection for an App Service app.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: RelayServiceConnectionEntity resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.RelayServiceConnectionEntityProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.RelayServiceConnectionEntityProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """RelayServiceConnectionEntity resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "entity_name",
        "entity_connection_string",
        "resource_type",
        "resource_connection_string",
        "hostname",
        "port",
        "biztalk_uri",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.RelayServiceConnectionEntityProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class RelayServiceConnectionEntityProperties(_Model):
    """RelayServiceConnectionEntity resource specific properties.

    :ivar entity_name:
    :vartype entity_name: str
    :ivar entity_connection_string:
    :vartype entity_connection_string: str
    :ivar resource_type:
    :vartype resource_type: str
    :ivar resource_connection_string:
    :vartype resource_connection_string: str
    :ivar hostname:
    :vartype hostname: str
    :ivar port:
    :vartype port: int
    :ivar biztalk_uri:
    :vartype biztalk_uri: str
    """

    entity_name: Optional[str] = rest_field(
        name="entityName", visibility=["read", "create", "update", "delete", "query"]
    )
    entity_connection_string: Optional[str] = rest_field(
        name="entityConnectionString", visibility=["read", "create", "update", "delete", "query"]
    )
    resource_type: Optional[str] = rest_field(
        name="resourceType", visibility=["read", "create", "update", "delete", "query"]
    )
    resource_connection_string: Optional[str] = rest_field(
        name="resourceConnectionString", visibility=["read", "create", "update", "delete", "query"]
    )
    hostname: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    port: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    biztalk_uri: Optional[str] = rest_field(
        name="biztalkUri", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        entity_name: Optional[str] = None,
        entity_connection_string: Optional[str] = None,
        resource_type: Optional[str] = None,
        resource_connection_string: Optional[str] = None,
        hostname: Optional[str] = None,
        port: Optional[int] = None,
        biztalk_uri: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RemotePrivateEndpointConnection(ProxyOnlyResource):
    """A remote private endpoint connection.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: RemotePrivateEndpointConnection resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.RemotePrivateEndpointConnectionProperties
    """

    properties: Optional["_models.RemotePrivateEndpointConnectionProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """RemotePrivateEndpointConnection resource specific properties."""

    __flattened_items = [
        "provisioning_state",
        "private_endpoint",
        "private_link_service_connection_state",
        "ip_addresses",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.RemotePrivateEndpointConnectionProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class RemotePrivateEndpointConnectionARMResource(ProxyResource):  # pylint: disable=name-too-long
    """Remote Private Endpoint Connection ARM resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: RemotePrivateEndpointConnectionARMResource resource specific properties.
    :vartype properties:
     ~azure.mgmt.web.models.RemotePrivateEndpointConnectionARMResourceProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.RemotePrivateEndpointConnectionARMResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """RemotePrivateEndpointConnectionARMResource resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "provisioning_state",
        "private_endpoint",
        "private_link_service_connection_state",
        "ip_addresses",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.RemotePrivateEndpointConnectionARMResourceProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class RemotePrivateEndpointConnectionARMResourceProperties(_Model):  # pylint: disable=name-too-long
    """RemotePrivateEndpointConnectionARMResource resource specific properties.

    :ivar provisioning_state:
    :vartype provisioning_state: str
    :ivar private_endpoint: PrivateEndpoint of a remote private endpoint connection.
    :vartype private_endpoint: ~azure.mgmt.web.models.ArmIdWrapper
    :ivar private_link_service_connection_state: The state of a private link connection.
    :vartype private_link_service_connection_state:
     ~azure.mgmt.web.models.PrivateLinkConnectionState
    :ivar ip_addresses: Private IPAddresses mapped to the remote private endpoint.
    :vartype ip_addresses: list[str]
    """

    provisioning_state: Optional[str] = rest_field(name="provisioningState", visibility=["read"])
    private_endpoint: Optional["_models.ArmIdWrapper"] = rest_field(
        name="privateEndpoint", visibility=["read", "create", "update", "delete", "query"]
    )
    """PrivateEndpoint of a remote private endpoint connection."""
    private_link_service_connection_state: Optional["_models.PrivateLinkConnectionState"] = rest_field(
        name="privateLinkServiceConnectionState", visibility=["read", "create", "update", "delete", "query"]
    )
    """The state of a private link connection."""
    ip_addresses: Optional[list[str]] = rest_field(
        name="ipAddresses", visibility=["read", "create", "update", "delete", "query"]
    )
    """Private IPAddresses mapped to the remote private endpoint."""

    @overload
    def __init__(
        self,
        *,
        private_endpoint: Optional["_models.ArmIdWrapper"] = None,
        private_link_service_connection_state: Optional["_models.PrivateLinkConnectionState"] = None,
        ip_addresses: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RemotePrivateEndpointConnectionProperties(_Model):  # pylint: disable=name-too-long
    """RemotePrivateEndpointConnection resource specific properties.

    :ivar provisioning_state:
    :vartype provisioning_state: str
    :ivar private_endpoint: PrivateEndpoint of a remote private endpoint connection.
    :vartype private_endpoint: ~azure.mgmt.web.models.ArmIdWrapper
    :ivar private_link_service_connection_state: The state of a private link connection.
    :vartype private_link_service_connection_state:
     ~azure.mgmt.web.models.PrivateLinkConnectionState
    :ivar ip_addresses: Private IPAddresses mapped to the remote private endpoint.
    :vartype ip_addresses: list[str]
    """

    provisioning_state: Optional[str] = rest_field(name="provisioningState", visibility=["read"])
    private_endpoint: Optional["_models.ArmIdWrapper"] = rest_field(
        name="privateEndpoint", visibility=["read", "create", "update", "delete", "query"]
    )
    """PrivateEndpoint of a remote private endpoint connection."""
    private_link_service_connection_state: Optional["_models.PrivateLinkConnectionState"] = rest_field(
        name="privateLinkServiceConnectionState", visibility=["read", "create", "update", "delete", "query"]
    )
    """The state of a private link connection."""
    ip_addresses: Optional[list[str]] = rest_field(
        name="ipAddresses", visibility=["read", "create", "update", "delete", "query"]
    )
    """Private IPAddresses mapped to the remote private endpoint."""

    @overload
    def __init__(
        self,
        *,
        private_endpoint: Optional["_models.ArmIdWrapper"] = None,
        private_link_service_connection_state: Optional["_models.PrivateLinkConnectionState"] = None,
        ip_addresses: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Rendering(_Model):
    """Instructions for rendering the data.

    :ivar type: Rendering Type. Known values are: "NoGraph", "Table", "TimeSeries",
     "TimeSeriesPerInstance", "PieChart", "DataSummary", "Email", "Insights", "DynamicInsight",
     "Markdown", "Detector", "DropDown", "Card", "Solution", "Guage", "Form", "ChangeSets",
     "ChangeAnalysisOnboarding", "ChangesView", "AppInsight", "DependencyGraph", "DownTime",
     "SummaryCard", "SearchComponent", and "AppInsightEnablement".
    :vartype type: str or ~azure.mgmt.web.models.RenderingType
    :ivar title: Title of data.
    :vartype title: str
    :ivar description: Description of the data that will help it be interpreted.
    :vartype description: str
    """

    type: Optional[Union[str, "_models.RenderingType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Rendering Type. Known values are: \"NoGraph\", \"Table\", \"TimeSeries\",
     \"TimeSeriesPerInstance\", \"PieChart\", \"DataSummary\", \"Email\", \"Insights\",
     \"DynamicInsight\", \"Markdown\", \"Detector\", \"DropDown\", \"Card\", \"Solution\",
     \"Guage\", \"Form\", \"ChangeSets\", \"ChangeAnalysisOnboarding\", \"ChangesView\",
     \"AppInsight\", \"DependencyGraph\", \"DownTime\", \"SummaryCard\", \"SearchComponent\", and
     \"AppInsightEnablement\"."""
    title: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Title of data."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Description of the data that will help it be interpreted."""

    @overload
    def __init__(
        self,
        *,
        type: Optional[Union[str, "_models.RenderingType"]] = None,
        title: Optional[str] = None,
        description: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RepetitionIndex(_Model):
    """The workflow run action repetition index.

    :ivar scope_name: The scope.
    :vartype scope_name: str
    :ivar item_index: The index. Required.
    :vartype item_index: int
    """

    scope_name: Optional[str] = rest_field(name="scopeName", visibility=["read", "create", "update", "delete", "query"])
    """The scope."""
    item_index: int = rest_field(name="itemIndex", visibility=["read", "create", "update", "delete", "query"])
    """The index. Required."""

    @overload
    def __init__(
        self,
        *,
        item_index: int,
        scope_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Request(_Model):
    """A request.

    :ivar headers: A list of all the headers attached to the request.
    :vartype headers: any
    :ivar uri: The destination for the request.
    :vartype uri: str
    :ivar method: The HTTP method used for the request.
    :vartype method: str
    """

    headers: Optional[Any] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """A list of all the headers attached to the request."""
    uri: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The destination for the request."""
    method: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The HTTP method used for the request."""

    @overload
    def __init__(
        self,
        *,
        headers: Optional[Any] = None,
        uri: Optional[str] = None,
        method: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RequestHistory(TrackedResource):
    """The request history.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: The request history properties.
    :vartype properties: ~azure.mgmt.web.models.RequestHistoryProperties
    """

    properties: Optional["_models.RequestHistoryProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The request history properties."""

    @overload
    def __init__(
        self,
        *,
        location: str,
        tags: Optional[dict[str, str]] = None,
        properties: Optional["_models.RequestHistoryProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RequestHistoryProperties(_Model):
    """The request history.

    :ivar start_time: The time the request started.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: The time the request ended.
    :vartype end_time: ~datetime.datetime
    :ivar request: The request.
    :vartype request: ~azure.mgmt.web.models.Request
    :ivar response: The response.
    :vartype response: ~azure.mgmt.web.models.Response
    """

    start_time: Optional[datetime.datetime] = rest_field(
        name="startTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The time the request started."""
    end_time: Optional[datetime.datetime] = rest_field(
        name="endTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The time the request ended."""
    request: Optional["_models.Request"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The request."""
    response: Optional["_models.Response"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The response."""

    @overload
    def __init__(
        self,
        *,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        request: Optional["_models.Request"] = None,
        response: Optional["_models.Response"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RequestsBasedTrigger(_Model):
    """Trigger based on total requests.

    :ivar count: Request Count.
    :vartype count: int
    :ivar time_interval: Time interval.
    :vartype time_interval: str
    """

    count: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Request Count."""
    time_interval: Optional[str] = rest_field(
        name="timeInterval", visibility=["read", "create", "update", "delete", "query"]
    )
    """Time interval."""

    @overload
    def __init__(
        self,
        *,
        count: Optional[int] = None,
        time_interval: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ResourceConfig(_Model):
    """Function app resource requirements.

    :ivar cpu: Required CPU in cores, e.g. 0.5.
    :vartype cpu: float
    :ivar memory: Required memory, e.g. "1Gi".
    :vartype memory: str
    """

    cpu: Optional[float] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Required CPU in cores, e.g. 0.5."""
    memory: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Required memory, e.g. \"1Gi\"."""

    @overload
    def __init__(
        self,
        *,
        cpu: Optional[float] = None,
        memory: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ResourceHealthMetadata(ProxyResource):
    """Used for getting ResourceHealthCheck settings.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: ResourceHealthMetadata resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.ResourceHealthMetadataProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.ResourceHealthMetadataProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """ResourceHealthMetadata resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["category", "signal_availability"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.ResourceHealthMetadataProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class ResourceHealthMetadataProperties(_Model):
    """ResourceHealthMetadata resource specific properties.

    :ivar category: The category that the resource matches in the RHC Policy File.
    :vartype category: str
    :ivar signal_availability: Is there a health signal for the resource.
    :vartype signal_availability: bool
    """

    category: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The category that the resource matches in the RHC Policy File."""
    signal_availability: Optional[bool] = rest_field(
        name="signalAvailability", visibility=["read", "create", "update", "delete", "query"]
    )
    """Is there a health signal for the resource."""

    @overload
    def __init__(
        self,
        *,
        category: Optional[str] = None,
        signal_availability: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ResourceMetricAvailability(_Model):
    """Metrics availability and retention.

    :ivar time_grain: Time grain .
    :vartype time_grain: str
    :ivar retention: Retention period for the current time grain.
    :vartype retention: str
    """

    time_grain: Optional[str] = rest_field(name="timeGrain", visibility=["read"])
    """Time grain ."""
    retention: Optional[str] = rest_field(visibility=["read"])
    """Retention period for the current time grain."""


class ResourceMetricDefinition(ProxyOnlyResource):
    """Metadata for the metrics.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: ResourceMetricDefinition resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.ResourceMetricDefinitionProperties
    """

    properties: Optional["_models.ResourceMetricDefinitionProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """ResourceMetricDefinition resource specific properties."""

    __flattened_items = ["unit", "primary_aggregation_type", "metric_availabilities", "resource_uri", "properties"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.ResourceMetricDefinitionProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class ResourceMetricDefinitionProperties(_Model):
    """ResourceMetricDefinition resource specific properties.

    :ivar unit: Unit of the metric.
    :vartype unit: str
    :ivar primary_aggregation_type: Primary aggregation type.
    :vartype primary_aggregation_type: str
    :ivar metric_availabilities: List of time grains supported for the metric together with
     retention period.
    :vartype metric_availabilities: list[~azure.mgmt.web.models.ResourceMetricAvailability]
    :ivar resource_uri: Resource URI.
    :vartype resource_uri: str
    :ivar properties: Resource metric definition properties.
    :vartype properties: dict[str, str]
    """

    unit: Optional[str] = rest_field(visibility=["read"])
    """Unit of the metric."""
    primary_aggregation_type: Optional[str] = rest_field(name="primaryAggregationType", visibility=["read"])
    """Primary aggregation type."""
    metric_availabilities: Optional[list["_models.ResourceMetricAvailability"]] = rest_field(
        name="metricAvailabilities", visibility=["read"]
    )
    """List of time grains supported for the metric together with retention period."""
    resource_uri: Optional[str] = rest_field(name="resourceUri", visibility=["read"])
    """Resource URI."""
    properties: Optional[dict[str, str]] = rest_field(visibility=["read"])
    """Resource metric definition properties."""


class ResourceNameAvailability(_Model):
    """Information regarding availability of a resource name.

    :ivar name_available: <code>true</code> indicates name is valid and available.
     <code>false</code> indicates the name is invalid, unavailable, or both.
    :vartype name_available: bool
    :ivar reason: <code>Invalid</code> indicates the name provided does not match Azure App Service
     naming requirements. <code>AlreadyExists</code> indicates that the name is already in use and
     is therefore unavailable. Known values are: "Invalid" and "AlreadyExists".
    :vartype reason: str or ~azure.mgmt.web.models.InAvailabilityReasonType
    :ivar message: If reason == invalid, provide the user with the reason why the given name is
     invalid, and provide the resource naming requirements so that the user can select a valid name.
     If reason == AlreadyExists, explain that resource name is already in use, and direct them to
     select a different name.
    :vartype message: str
    """

    name_available: Optional[bool] = rest_field(
        name="nameAvailable", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> indicates name is valid and available. <code>false</code> indicates the name
     is invalid, unavailable, or both."""
    reason: Optional[Union[str, "_models.InAvailabilityReasonType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>Invalid</code> indicates the name provided does not match Azure App Service naming
     requirements. <code>AlreadyExists</code> indicates that the name is already in use and is
     therefore unavailable. Known values are: \"Invalid\" and \"AlreadyExists\"."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """If reason == invalid, provide the user with the reason why the given name is invalid, and
     provide the resource naming requirements so that the user can select a valid name. If reason ==
     AlreadyExists, explain that resource name is already in use, and direct them to select a
     different name."""

    @overload
    def __init__(
        self,
        *,
        name_available: Optional[bool] = None,
        reason: Optional[Union[str, "_models.InAvailabilityReasonType"]] = None,
        message: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ResourceNameAvailabilityRequest(_Model):
    """Resource name availability request content.

    :ivar name: Resource name to verify. Required.
    :vartype name: str
    :ivar type: Resource type used for verification. Required. Known values are: "Site", "Slot",
     "HostingEnvironment", "PublishingUser", "Microsoft.Web/sites", "Microsoft.Web/sites/slots",
     "Microsoft.Web/hostingEnvironments", and "Microsoft.Web/publishingUsers".
    :vartype type: str or ~azure.mgmt.web.models.CheckNameResourceTypes
    :ivar is_fqdn: Is fully qualified domain name.
    :vartype is_fqdn: bool
    :ivar environment_id: Azure Resource Manager ID of the customer's selected Container Apps
     Environment on which to host the Function app. This must be of the form
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.App/managedEnvironments/{managedEnvironmentName}.
    :vartype environment_id: str
    """

    name: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Resource name to verify. Required."""
    type: Union[str, "_models.CheckNameResourceTypes"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource type used for verification. Required. Known values are: \"Site\", \"Slot\",
     \"HostingEnvironment\", \"PublishingUser\", \"Microsoft.Web/sites\",
     \"Microsoft.Web/sites/slots\", \"Microsoft.Web/hostingEnvironments\", and
     \"Microsoft.Web/publishingUsers\"."""
    is_fqdn: Optional[bool] = rest_field(name="isFqdn", visibility=["read", "create", "update", "delete", "query"])
    """Is fully qualified domain name."""
    environment_id: Optional[str] = rest_field(
        name="environmentId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Azure Resource Manager ID of the customer's selected Container Apps Environment on which to
     host the Function app. This must be of the form
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.App/managedEnvironments/{managedEnvironmentName}."""

    @overload
    def __init__(
        self,
        *,
        name: str,
        type: Union[str, "_models.CheckNameResourceTypes"],
        is_fqdn: Optional[bool] = None,
        environment_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ResourceReference(_Model):
    """The resource reference.

    :ivar id: The resource id.
    :vartype id: str
    :ivar name: Gets the resource name.
    :vartype name: str
    :ivar type: Gets the resource type.
    :vartype type: str
    """

    id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The resource id."""
    name: Optional[str] = rest_field(visibility=["read"])
    """Gets the resource name."""
    type: Optional[str] = rest_field(visibility=["read"])
    """Gets the resource type."""

    @overload
    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Response(_Model):
    """A response.

    :ivar headers: A list of all the headers attached to the response.
    :vartype headers: any
    :ivar status_code: The status code of the response.
    :vartype status_code: int
    :ivar body_link: Details on the location of the body content.
    :vartype body_link: ~azure.mgmt.web.models.ContentLink
    """

    headers: Optional[Any] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """A list of all the headers attached to the response."""
    status_code: Optional[int] = rest_field(
        name="statusCode", visibility=["read", "create", "update", "delete", "query"]
    )
    """The status code of the response."""
    body_link: Optional["_models.ContentLink"] = rest_field(
        name="bodyLink", visibility=["read", "create", "update", "delete", "query"]
    )
    """Details on the location of the body content."""

    @overload
    def __init__(
        self,
        *,
        headers: Optional[Any] = None,
        status_code: Optional[int] = None,
        body_link: Optional["_models.ContentLink"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ResponseMessageEnvelopeRemotePrivateEndpointConnection(_Model):  # pylint: disable=name-too-long
    """Message envelope that contains the common Azure resource manager properties and the resource
    provider specific content.

    :ivar id: Resource Id. Typically ID is populated only for responses to GET requests. Caller is
     responsible for passing in this value for GET requests only. For example:
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupId}/providers/Microsoft.Web/sites/{sitename}.
    :vartype id: str
    :ivar name: Name of resource.
    :vartype name: str
    :ivar type: Type of resource e.g "Microsoft.Web/sites".
    :vartype type: str
    :ivar location: Geographical region resource belongs to e.g. SouthCentralUS, SouthEastAsia.
    :vartype location: str
    :ivar tags: Tags associated with resource.
    :vartype tags: dict[str, str]
    :ivar plan: Azure resource manager plan.
    :vartype plan: ~azure.mgmt.web.models.ArmPlan
    :ivar properties: Resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.RemotePrivateEndpointConnection
    :ivar sku: SKU description of the resource.
    :vartype sku: ~azure.mgmt.web.models.SkuDescription
    :ivar status: Azure-AsyncOperation Status info.
    :vartype status: str
    :ivar error: Azure-AsyncOperation Error info.
    :vartype error: ~azure.mgmt.web.models.ErrorEntity
    :ivar identity: MSI resource.
    :vartype identity: ~azure.mgmt.web.models.ManagedServiceIdentity
    :ivar zones: Logical Availability Zones the service is hosted in.
    :vartype zones: list[str]
    """

    id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Resource Id. Typically ID is populated only for responses to GET requests. Caller is
     responsible for passing in this value for GET requests only. For example:
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupId}/providers/Microsoft.Web/sites/{sitename}."""
    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of resource."""
    type: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Type of resource e.g \"Microsoft.Web/sites\"."""
    location: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Geographical region resource belongs to e.g. SouthCentralUS, SouthEastAsia."""
    tags: Optional[dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Tags associated with resource."""
    plan: Optional["_models.ArmPlan"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Azure resource manager plan."""
    properties: Optional["_models.RemotePrivateEndpointConnection"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource specific properties."""
    sku: Optional["_models.SkuDescription"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """SKU description of the resource."""
    status: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Azure-AsyncOperation Status info."""
    error: Optional["_models.ErrorEntity"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Azure-AsyncOperation Error info."""
    identity: Optional["_models.ManagedServiceIdentity"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """MSI resource."""
    zones: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Logical Availability Zones the service is hosted in."""

    @overload
    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        name: Optional[str] = None,
        type: Optional[str] = None,
        location: Optional[str] = None,
        tags: Optional[dict[str, str]] = None,
        plan: Optional["_models.ArmPlan"] = None,
        properties: Optional["_models.RemotePrivateEndpointConnection"] = None,
        sku: Optional["_models.SkuDescription"] = None,
        status: Optional[str] = None,
        error: Optional["_models.ErrorEntity"] = None,
        identity: Optional["_models.ManagedServiceIdentity"] = None,
        zones: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ResponseMetaData(_Model):
    """ResponseMetaData.

    :ivar data_source: Source of the Data.
    :vartype data_source: ~azure.mgmt.web.models.DataSource
    """

    data_source: Optional["_models.DataSource"] = rest_field(
        name="dataSource", visibility=["read", "create", "update", "delete", "query"]
    )
    """Source of the Data."""

    @overload
    def __init__(
        self,
        *,
        data_source: Optional["_models.DataSource"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RestoreRequest(ProxyOnlyResource):
    """Description of a restore request.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: RestoreRequest resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.RestoreRequestProperties
    """

    properties: Optional["_models.RestoreRequestProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """RestoreRequest resource specific properties."""

    __flattened_items = [
        "storage_account_url",
        "blob_name",
        "overwrite",
        "site_name",
        "databases",
        "ignore_conflicting_host_names",
        "ignore_databases",
        "app_service_plan",
        "operation_type",
        "adjust_connection_strings",
        "hosting_environment",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.RestoreRequestProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class RestoreRequestProperties(_Model):
    """RestoreRequest resource specific properties.

    :ivar storage_account_url: SAS URL to the container. Required.
    :vartype storage_account_url: str
    :ivar blob_name: Name of a blob which contains the backup.
    :vartype blob_name: str
    :ivar overwrite: <code>true</code> if the restore operation can overwrite target app;
     otherwise, <code>false</code>. <code>true</code> is needed if trying to restore over an
     existing app. Required.
    :vartype overwrite: bool
    :ivar site_name: Name of an app.
    :vartype site_name: str
    :ivar databases: Collection of databases which should be restored. This list has to match the
     list of databases included in the backup.
    :vartype databases: list[~azure.mgmt.web.models.DatabaseBackupSetting]
    :ivar ignore_conflicting_host_names: Changes a logic when restoring an app with custom domains.
     <code>true</code> to remove custom domains automatically. If <code>false</code>, custom domains
     are added to \\nthe app's object when it is being restored, but that might fail due to
     conflicts during the operation.
    :vartype ignore_conflicting_host_names: bool
    :ivar ignore_databases: Ignore the databases and only restore the site content.
    :vartype ignore_databases: bool
    :ivar app_service_plan: Specify app service plan that will own restored site.
    :vartype app_service_plan: str
    :ivar operation_type: Operation type. Known values are: "Default", "Clone", "Relocation",
     "Snapshot", and "CloudFS".
    :vartype operation_type: str or ~azure.mgmt.web.models.BackupRestoreOperationType
    :ivar adjust_connection_strings: <code>true</code> if SiteConfig.ConnectionStrings should be
     set in new app; otherwise, <code>false</code>.
    :vartype adjust_connection_strings: bool
    :ivar hosting_environment: App Service Environment name, if needed (only when restoring an app
     to an App Service Environment).
    :vartype hosting_environment: str
    """

    storage_account_url: str = rest_field(
        name="storageAccountUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """SAS URL to the container. Required."""
    blob_name: Optional[str] = rest_field(name="blobName", visibility=["read", "create", "update", "delete", "query"])
    """Name of a blob which contains the backup."""
    overwrite: bool = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> if the restore operation can overwrite target app; otherwise,
     <code>false</code>. <code>true</code> is needed if trying to restore over an existing app.
     Required."""
    site_name: Optional[str] = rest_field(name="siteName", visibility=["read", "create", "update", "delete", "query"])
    """Name of an app."""
    databases: Optional[list["_models.DatabaseBackupSetting"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Collection of databases which should be restored. This list has to match the list of databases
     included in the backup."""
    ignore_conflicting_host_names: Optional[bool] = rest_field(
        name="ignoreConflictingHostNames", visibility=["read", "create", "update", "delete", "query"]
    )
    """Changes a logic when restoring an app with custom domains. <code>true</code> to remove custom
     domains automatically. If <code>false</code>, custom domains are added to \nthe app's object
     when it is being restored, but that might fail due to conflicts during the operation."""
    ignore_databases: Optional[bool] = rest_field(
        name="ignoreDatabases", visibility=["read", "create", "update", "delete", "query"]
    )
    """Ignore the databases and only restore the site content."""
    app_service_plan: Optional[str] = rest_field(
        name="appServicePlan", visibility=["read", "create", "update", "delete", "query"]
    )
    """Specify app service plan that will own restored site."""
    operation_type: Optional[Union[str, "_models.BackupRestoreOperationType"]] = rest_field(
        name="operationType", visibility=["read", "create", "update", "delete", "query"]
    )
    """Operation type. Known values are: \"Default\", \"Clone\", \"Relocation\", \"Snapshot\", and
     \"CloudFS\"."""
    adjust_connection_strings: Optional[bool] = rest_field(
        name="adjustConnectionStrings", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if SiteConfig.ConnectionStrings should be set in new app; otherwise,
     <code>false</code>."""
    hosting_environment: Optional[str] = rest_field(
        name="hostingEnvironment", visibility=["read", "create", "update", "delete", "query"]
    )
    """App Service Environment name, if needed (only when restoring an app to an App Service
     Environment)."""

    @overload
    def __init__(
        self,
        *,
        storage_account_url: str,
        overwrite: bool,
        blob_name: Optional[str] = None,
        site_name: Optional[str] = None,
        databases: Optional[list["_models.DatabaseBackupSetting"]] = None,
        ignore_conflicting_host_names: Optional[bool] = None,
        ignore_databases: Optional[bool] = None,
        app_service_plan: Optional[str] = None,
        operation_type: Optional[Union[str, "_models.BackupRestoreOperationType"]] = None,
        adjust_connection_strings: Optional[bool] = None,
        hosting_environment: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RetryHistory(_Model):
    """The retry history.

    :ivar start_time: Gets the start time.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: Gets the end time.
    :vartype end_time: ~datetime.datetime
    :ivar code: Gets the status code.
    :vartype code: str
    :ivar client_request_id: Gets the client request Id.
    :vartype client_request_id: str
    :ivar service_request_id: Gets the service request Id.
    :vartype service_request_id: str
    :ivar error: Gets the error response.
    :vartype error: ~azure.mgmt.web.models.WorkflowErrorResponse
    """

    start_time: Optional[datetime.datetime] = rest_field(
        name="startTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Gets the start time."""
    end_time: Optional[datetime.datetime] = rest_field(
        name="endTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Gets the end time."""
    code: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Gets the status code."""
    client_request_id: Optional[str] = rest_field(
        name="clientRequestId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets the client request Id."""
    service_request_id: Optional[str] = rest_field(
        name="serviceRequestId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets the service request Id."""
    error: Optional["_models.WorkflowErrorResponse"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets the error response."""

    @overload
    def __init__(
        self,
        *,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        code: Optional[str] = None,
        client_request_id: Optional[str] = None,
        service_request_id: Optional[str] = None,
        error: Optional["_models.WorkflowErrorResponse"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RunCorrelation(_Model):
    """The correlation properties.

    :ivar client_tracking_id: The client tracking identifier.
    :vartype client_tracking_id: str
    :ivar client_keywords: The client keywords.
    :vartype client_keywords: list[str]
    """

    client_tracking_id: Optional[str] = rest_field(
        name="clientTrackingId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The client tracking identifier."""
    client_keywords: Optional[list[str]] = rest_field(
        name="clientKeywords", visibility=["read", "create", "update", "delete", "query"]
    )
    """The client keywords."""

    @overload
    def __init__(
        self,
        *,
        client_tracking_id: Optional[str] = None,
        client_keywords: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class RunActionCorrelation(RunCorrelation):
    """The workflow run action correlation properties.

    :ivar client_tracking_id: The client tracking identifier.
    :vartype client_tracking_id: str
    :ivar client_keywords: The client keywords.
    :vartype client_keywords: list[str]
    :ivar action_tracking_id: The action tracking identifier.
    :vartype action_tracking_id: str
    """

    action_tracking_id: Optional[str] = rest_field(
        name="actionTrackingId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The action tracking identifier."""

    @overload
    def __init__(
        self,
        *,
        client_tracking_id: Optional[str] = None,
        client_keywords: Optional[list[str]] = None,
        action_tracking_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SampleUtterance(_Model):
    """Sample utterance.

    :ivar text: Text attribute of sample utterance.
    :vartype text: str
    :ivar links: Links attribute of sample utterance.
    :vartype links: list[str]
    :ivar qid: Question id of sample utterance (for stackoverflow questions titles).
    :vartype qid: str
    """

    text: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Text attribute of sample utterance."""
    links: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Links attribute of sample utterance."""
    qid: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Question id of sample utterance (for stackoverflow questions titles)."""

    @overload
    def __init__(
        self,
        *,
        text: Optional[str] = None,
        links: Optional[list[str]] = None,
        qid: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ServerFarmInstance(_Model):
    """Represents details of a single instance in a server farm.

    :ivar instance_name: The instance name.
    :vartype instance_name: str
    :ivar ip_address: The instance IP address.
    :vartype ip_address: str
    :ivar status: The instance status.
    :vartype status: str
    """

    instance_name: Optional[str] = rest_field(
        name="instanceName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The instance name."""
    ip_address: Optional[str] = rest_field(name="ipAddress", visibility=["read", "create", "update", "delete", "query"])
    """The instance IP address."""
    status: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The instance status."""

    @overload
    def __init__(
        self,
        *,
        instance_name: Optional[str] = None,
        ip_address: Optional[str] = None,
        status: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ServerFarmInstanceDetails(_Model):
    """Represents instance details for an app service plan.

    :ivar server_farm_name: The server farm name.
    :vartype server_farm_name: str
    :ivar instances: The list of server farm instances.
    :vartype instances: list[~azure.mgmt.web.models.ServerFarmInstance]
    :ivar instance_count: The total number of instances.
    :vartype instance_count: int
    """

    server_farm_name: Optional[str] = rest_field(
        name="serverFarmName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The server farm name."""
    instances: Optional[list["_models.ServerFarmInstance"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The list of server farm instances."""
    instance_count: Optional[int] = rest_field(
        name="instanceCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """The total number of instances."""

    @overload
    def __init__(
        self,
        *,
        server_farm_name: Optional[str] = None,
        instances: Optional[list["_models.ServerFarmInstance"]] = None,
        instance_count: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ServerFarmNetworkSettings(_Model):
    """Network settings for an app service plan.

    :ivar virtual_network_subnet_id: Azure Resource Manager ID of the Virtual network and subnet to
     be joined by Regional VNET Integration. This must be of the form
     /subscriptions/{subscriptionName}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}.
    :vartype virtual_network_subnet_id: str
    """

    virtual_network_subnet_id: Optional[str] = rest_field(
        name="virtualNetworkSubnetId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Azure Resource Manager ID of the Virtual network and subnet to be joined by Regional VNET
     Integration. This must be of the form
     /subscriptions/{subscriptionName}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}."""

    @overload
    def __init__(
        self,
        *,
        virtual_network_subnet_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ServerFarmRdpDetails(_Model):
    """Server Farm RDP connection details.

    :ivar rdp_password: The RDP password for the server farm.
    :vartype rdp_password: str
    :ivar rdp_password_expiry: The RDP password expiry date.
    :vartype rdp_password_expiry: ~datetime.datetime
    """

    rdp_password: Optional[str] = rest_field(
        name="rdpPassword", visibility=["read", "create", "update", "delete", "query"]
    )
    """The RDP password for the server farm."""
    rdp_password_expiry: Optional[datetime.datetime] = rest_field(
        name="rdpPasswordExpiry", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The RDP password expiry date."""

    @overload
    def __init__(
        self,
        *,
        rdp_password: Optional[str] = None,
        rdp_password_expiry: Optional[datetime.datetime] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ServiceSpecification(_Model):
    """Resource metrics service provided by Microsoft.Insights resource provider.

    :ivar metric_specifications:
    :vartype metric_specifications: list[~azure.mgmt.web.models.MetricSpecification]
    :ivar log_specifications:
    :vartype log_specifications: list[~azure.mgmt.web.models.LogSpecification]
    """

    metric_specifications: Optional[list["_models.MetricSpecification"]] = rest_field(
        name="metricSpecifications", visibility=["read", "create", "update", "delete", "query"]
    )
    log_specifications: Optional[list["_models.LogSpecification"]] = rest_field(
        name="logSpecifications", visibility=["read", "create", "update", "delete", "query"]
    )

    @overload
    def __init__(
        self,
        *,
        metric_specifications: Optional[list["_models.MetricSpecification"]] = None,
        log_specifications: Optional[list["_models.LogSpecification"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Site(TrackedResource):
    """A web app, a mobile app backend, or an API app.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: Site resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SiteProperties
    :ivar identity: Managed service identity.
    :vartype identity: ~azure.mgmt.web.models.ManagedServiceIdentity
    :ivar extended_location: Extended Location.
    :vartype extended_location: ~azure.mgmt.web.models.ExtendedLocation
    :ivar kind: Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind.
    :vartype kind: str
    """

    properties: Optional["_models.SiteProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Site resource specific properties."""
    identity: Optional["_models.ManagedServiceIdentity"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Managed service identity."""
    extended_location: Optional["_models.ExtendedLocation"] = rest_field(
        name="extendedLocation", visibility=["read", "create", "update", "delete", "query"]
    )
    """Extended Location."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind."""

    __flattened_items = [
        "state",
        "host_names",
        "repository_site_name",
        "usage_state",
        "enabled",
        "enabled_host_names",
        "availability_state",
        "host_name_ssl_states",
        "server_farm_id",
        "reserved",
        "is_xenon",
        "hyper_v",
        "last_modified_time_utc",
        "dns_configuration",
        "outbound_vnet_routing",
        "site_config",
        "function_app_config",
        "dapr_config",
        "workload_profile_name",
        "resource_config",
        "traffic_manager_host_names",
        "scm_site_also_stopped",
        "target_swap_slot",
        "hosting_environment_profile",
        "client_affinity_enabled",
        "client_affinity_partitioning_enabled",
        "client_affinity_proxy_enabled",
        "client_cert_enabled",
        "client_cert_mode",
        "client_cert_exclusion_paths",
        "ip_mode",
        "end_to_end_encryption_enabled",
        "ssh_enabled",
        "host_names_disabled",
        "custom_domain_verification_id",
        "outbound_ip_addresses",
        "possible_outbound_ip_addresses",
        "container_size",
        "daily_memory_time_quota",
        "suspended_till",
        "max_number_of_workers",
        "cloning_info",
        "resource_group",
        "is_default_container",
        "default_host_name",
        "slot_swap_status",
        "https_only",
        "redundancy_mode",
        "in_progress_operation_id",
        "public_network_access",
        "storage_account_required",
        "key_vault_reference_identity",
        "auto_generated_domain_name_label_scope",
        "virtual_network_subnet_id",
        "managed_environment_id",
        "sku",
    ]

    @overload
    def __init__(
        self,
        *,
        location: str,
        tags: Optional[dict[str, str]] = None,
        properties: Optional["_models.SiteProperties"] = None,
        identity: Optional["_models.ManagedServiceIdentity"] = None,
        extended_location: Optional["_models.ExtendedLocation"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SiteAuthSettings(ProxyOnlyResource):
    """Configuration settings for the Azure App Service Authentication / Authorization feature.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: SiteAuthSettings resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SiteAuthSettingsProperties
    """

    properties: Optional["_models.SiteAuthSettingsProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SiteAuthSettings resource specific properties."""

    __flattened_items = [
        "enabled",
        "runtime_version",
        "unauthenticated_client_action",
        "token_store_enabled",
        "allowed_external_redirect_urls",
        "default_provider",
        "token_refresh_extension_hours",
        "client_id",
        "client_secret",
        "client_secret_setting_name",
        "client_secret_certificate_thumbprint",
        "issuer",
        "validate_issuer",
        "allowed_audiences",
        "additional_login_params",
        "aad_claims_authorization",
        "google_client_id",
        "google_client_secret",
        "google_client_secret_setting_name",
        "google_o_auth_scopes",
        "facebook_app_id",
        "facebook_app_secret",
        "facebook_app_secret_setting_name",
        "facebook_o_auth_scopes",
        "git_hub_client_id",
        "git_hub_client_secret",
        "git_hub_client_secret_setting_name",
        "git_hub_o_auth_scopes",
        "twitter_consumer_key",
        "twitter_consumer_secret",
        "twitter_consumer_secret_setting_name",
        "microsoft_account_client_id",
        "microsoft_account_client_secret",
        "microsoft_account_client_secret_setting_name",
        "microsoft_account_o_auth_scopes",
        "is_auth_from_file",
        "auth_file_path",
        "config_version",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.SiteAuthSettingsProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SiteAuthSettingsProperties(_Model):
    """SiteAuthSettings resource specific properties.

    :ivar enabled: <code>true</code> if the Authentication / Authorization feature is enabled for
     the current app; otherwise, <code>false</code>.
    :vartype enabled: bool
    :ivar runtime_version: The RuntimeVersion of the Authentication / Authorization feature in use
     for the current app. The setting in this value can control the behavior of certain features in
     the Authentication / Authorization module.
    :vartype runtime_version: str
    :ivar unauthenticated_client_action: The action to take when an unauthenticated client attempts
     to access the app. Known values are: "RedirectToLoginPage" and "AllowAnonymous".
    :vartype unauthenticated_client_action: str or
     ~azure.mgmt.web.models.UnauthenticatedClientAction
    :ivar token_store_enabled: <code>true</code> to durably store platform-specific security tokens
     that are obtained during login flows; otherwise, <code>false</code>. The default is
     <code>false</code>.
    :vartype token_store_enabled: bool
    :ivar allowed_external_redirect_urls: External URLs that can be redirected to as part of
     logging in or logging out of the app. Note that the query string part of the URL is ignored.
     This is an advanced setting typically only needed by Windows Store application backends. Note
     that URLs within the current domain are always implicitly allowed.
    :vartype allowed_external_redirect_urls: list[str]
    :ivar default_provider: The default authentication provider to use when multiple providers are
     configured. This setting is only needed if multiple providers are configured and the
     unauthenticated client action is set to "RedirectToLoginPage". Known values are:
     "AzureActiveDirectory", "Facebook", "Google", "MicrosoftAccount", "Twitter", and "Github".
    :vartype default_provider: str or ~azure.mgmt.web.models.BuiltInAuthenticationProvider
    :ivar token_refresh_extension_hours: The number of hours after session token expiration that a
     session token can be used to call the token refresh API. The default is 72 hours.
    :vartype token_refresh_extension_hours: float
    :ivar client_id: The Client ID of this relying party application, known as the client_id. This
     setting is required for enabling OpenID Connection authentication with Azure Active Directory
     or other 3rd party OpenID Connect providers. More information on OpenID Connect:
     `http://openid.net/specs/openid-connect-core-1_0.html
     <http://openid.net/specs/openid-connect-core-1_0.html>`_.
    :vartype client_id: str
    :ivar client_secret: The Client Secret of this relying party application (in Azure Active
     Directory, this is also referred to as the Key). This setting is optional. If no client secret
     is configured, the OpenID Connect implicit auth flow is used to authenticate end users.
     Otherwise, the OpenID Connect Authorization Code Flow is used to authenticate end users. More
     information on OpenID Connect: `http://openid.net/specs/openid-connect-core-1_0.html
     <http://openid.net/specs/openid-connect-core-1_0.html>`_.
    :vartype client_secret: str
    :ivar client_secret_setting_name: The app setting name that contains the client secret of the
     relying party application.
    :vartype client_secret_setting_name: str
    :ivar client_secret_certificate_thumbprint: An alternative to the client secret, that is the
     thumbprint of a certificate used for signing purposes. This property acts as a replacement for
     the Client Secret. It is also optional.
    :vartype client_secret_certificate_thumbprint: str
    :ivar issuer: The OpenID Connect Issuer URI that represents the entity which issues access
     tokens for this application. When using Azure Active Directory, this value is the URI of the
     directory tenant, e.g. ``https://sts.windows.net/{tenant-guid}/``. This URI is a case-sensitive
     identifier for the token issuer. More information on OpenID Connect Discovery:
     `http://openid.net/specs/openid-connect-discovery-1_0.html
     <http://openid.net/specs/openid-connect-discovery-1_0.html>`_.
    :vartype issuer: str
    :ivar validate_issuer: Gets a value indicating whether the issuer should be a valid HTTPS url
     and be validated as such.
    :vartype validate_issuer: bool
    :ivar allowed_audiences: Allowed audience values to consider when validating JSON Web Tokens
     issued by Azure Active Directory. Note that the <code>ClientID</code> value is always
     considered an allowed audience, regardless of this setting.
    :vartype allowed_audiences: list[str]
    :ivar additional_login_params: Login parameters to send to the OpenID Connect authorization
     endpoint when a user logs in. Each parameter must be in the form "key=value".
    :vartype additional_login_params: list[str]
    :ivar aad_claims_authorization: Gets a JSON string containing the Azure AD Acl settings.
    :vartype aad_claims_authorization: str
    :ivar google_client_id: The OpenID Connect Client ID for the Google web application. This
     setting is required for enabling Google Sign-In. Google Sign-In documentation:
     `https://developers.google.com/identity/sign-in/web/
     <https://developers.google.com/identity/sign-in/web/>`_.
    :vartype google_client_id: str
    :ivar google_client_secret: The client secret associated with the Google web application. This
     setting is required for enabling Google Sign-In. Google Sign-In documentation:
     `https://developers.google.com/identity/sign-in/web/
     <https://developers.google.com/identity/sign-in/web/>`_.
    :vartype google_client_secret: str
    :ivar google_client_secret_setting_name: The app setting name that contains the client secret
     associated with the Google web application.
    :vartype google_client_secret_setting_name: str
    :ivar google_o_auth_scopes: The OAuth 2.0 scopes that will be requested as part of Google
     Sign-In authentication. This setting is optional. If not specified, "openid", "profile", and
     "email" are used as default scopes. Google Sign-In documentation:
     `https://developers.google.com/identity/sign-in/web/
     <https://developers.google.com/identity/sign-in/web/>`_.
    :vartype google_o_auth_scopes: list[str]
    :ivar facebook_app_id: The App ID of the Facebook app used for login. This setting is required
     for enabling Facebook Login. Facebook Login documentation:
     `https://developers.facebook.com/docs/facebook-login
     <https://developers.facebook.com/docs/facebook-login>`_.
    :vartype facebook_app_id: str
    :ivar facebook_app_secret: The App Secret of the Facebook app used for Facebook Login. This
     setting is required for enabling Facebook Login. Facebook Login documentation:
     `https://developers.facebook.com/docs/facebook-login
     <https://developers.facebook.com/docs/facebook-login>`_.
    :vartype facebook_app_secret: str
    :ivar facebook_app_secret_setting_name: The app setting name that contains the app secret used
     for Facebook Login.
    :vartype facebook_app_secret_setting_name: str
    :ivar facebook_o_auth_scopes: The OAuth 2.0 scopes that will be requested as part of Facebook
     Login authentication. This setting is optional. Facebook Login documentation:
     `https://developers.facebook.com/docs/facebook-login
     <https://developers.facebook.com/docs/facebook-login>`_.
    :vartype facebook_o_auth_scopes: list[str]
    :ivar git_hub_client_id: The Client Id of the GitHub app used for login. This setting is
     required for enabling Github login.
    :vartype git_hub_client_id: str
    :ivar git_hub_client_secret: The Client Secret of the GitHub app used for Github Login. This
     setting is required for enabling Github login.
    :vartype git_hub_client_secret: str
    :ivar git_hub_client_secret_setting_name: The app setting name that contains the client secret
     of the Github app used for GitHub Login.
    :vartype git_hub_client_secret_setting_name: str
    :ivar git_hub_o_auth_scopes: The OAuth 2.0 scopes that will be requested as part of GitHub
     Login authentication. This setting is optional.
    :vartype git_hub_o_auth_scopes: list[str]
    :ivar twitter_consumer_key: The OAuth 1.0a consumer key of the Twitter application used for
     sign-in. This setting is required for enabling Twitter Sign-In. Twitter Sign-In documentation:
     `https://dev.twitter.com/web/sign-in <https://dev.twitter.com/web/sign-in>`_.
    :vartype twitter_consumer_key: str
    :ivar twitter_consumer_secret: The OAuth 1.0a consumer secret of the Twitter application used
     for sign-in. This setting is required for enabling Twitter Sign-In. Twitter Sign-In
     documentation: `https://dev.twitter.com/web/sign-in <https://dev.twitter.com/web/sign-in>`_.
    :vartype twitter_consumer_secret: str
    :ivar twitter_consumer_secret_setting_name: The app setting name that contains the OAuth 1.0a
     consumer secret of the Twitter application used for sign-in.
    :vartype twitter_consumer_secret_setting_name: str
    :ivar microsoft_account_client_id: The OAuth 2.0 client ID that was created for the app used
     for authentication. This setting is required for enabling Microsoft Account authentication.
     Microsoft Account OAuth documentation: `https://dev.onedrive.com/auth/msa_oauth.htm
     <https://dev.onedrive.com/auth/msa_oauth.htm>`_.
    :vartype microsoft_account_client_id: str
    :ivar microsoft_account_client_secret: The OAuth 2.0 client secret that was created for the app
     used for authentication. This setting is required for enabling Microsoft Account
     authentication. Microsoft Account OAuth documentation:
     `https://dev.onedrive.com/auth/msa_oauth.htm <https://dev.onedrive.com/auth/msa_oauth.htm>`_.
    :vartype microsoft_account_client_secret: str
    :ivar microsoft_account_client_secret_setting_name: The app setting name containing the OAuth
     2.0 client secret that was created for the app used for authentication.
    :vartype microsoft_account_client_secret_setting_name: str
    :ivar microsoft_account_o_auth_scopes: The OAuth 2.0 scopes that will be requested as part of
     Microsoft Account authentication. This setting is optional. If not specified, "wl.basic" is
     used as the default scope. Microsoft Account Scopes and permissions documentation:
     `https://msdn.microsoft.com/en-us/library/dn631845.aspx
     <https://msdn.microsoft.com/en-us/library/dn631845.aspx>`_.
    :vartype microsoft_account_o_auth_scopes: list[str]
    :ivar is_auth_from_file: "true" if the auth config settings should be read from a file, "false"
     otherwise.
    :vartype is_auth_from_file: str
    :ivar auth_file_path: The path of the config file containing auth settings. If the path is
     relative, base will the site's root directory.
    :vartype auth_file_path: str
    :ivar config_version: The ConfigVersion of the Authentication / Authorization feature in use
     for the current app. The setting in this value can control the behavior of the control plane
     for Authentication / Authorization.
    :vartype config_version: str
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> if the Authentication / Authorization feature is enabled for the current app;
     otherwise, <code>false</code>."""
    runtime_version: Optional[str] = rest_field(
        name="runtimeVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """The RuntimeVersion of the Authentication / Authorization feature in use for the current app.
     The setting in this value can control the behavior of certain features in the Authentication /
     Authorization module."""
    unauthenticated_client_action: Optional[Union[str, "_models.UnauthenticatedClientAction"]] = rest_field(
        name="unauthenticatedClientAction", visibility=["read", "create", "update", "delete", "query"]
    )
    """The action to take when an unauthenticated client attempts to access the app. Known values are:
     \"RedirectToLoginPage\" and \"AllowAnonymous\"."""
    token_store_enabled: Optional[bool] = rest_field(
        name="tokenStoreEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to durably store platform-specific security tokens that are obtained during
     login flows; otherwise, <code>false</code>. The default is <code>false</code>."""
    allowed_external_redirect_urls: Optional[list[str]] = rest_field(
        name="allowedExternalRedirectUrls", visibility=["read", "create", "update", "delete", "query"]
    )
    """External URLs that can be redirected to as part of logging in or logging out of the app. Note
     that the query string part of the URL is ignored. This is an advanced setting typically only
     needed by Windows Store application backends. Note that URLs within the current domain are
     always implicitly allowed."""
    default_provider: Optional[Union[str, "_models.BuiltInAuthenticationProvider"]] = rest_field(
        name="defaultProvider", visibility=["read", "create", "update", "delete", "query"]
    )
    """The default authentication provider to use when multiple providers are configured. This setting
     is only needed if multiple providers are configured and the unauthenticated client action is
     set to \"RedirectToLoginPage\". Known values are: \"AzureActiveDirectory\", \"Facebook\",
     \"Google\", \"MicrosoftAccount\", \"Twitter\", and \"Github\"."""
    token_refresh_extension_hours: Optional[float] = rest_field(
        name="tokenRefreshExtensionHours", visibility=["read", "create", "update", "delete", "query"]
    )
    """The number of hours after session token expiration that a session token can be used to call the
     token refresh API. The default is 72 hours."""
    client_id: Optional[str] = rest_field(name="clientId", visibility=["read", "create", "update", "delete", "query"])
    """The Client ID of this relying party application, known as the client_id. This setting is
     required for enabling OpenID Connection authentication with Azure Active Directory or other 3rd
     party OpenID Connect providers. More information on OpenID Connect:
     `http://openid.net/specs/openid-connect-core-1_0.html
     <http://openid.net/specs/openid-connect-core-1_0.html>`_."""
    client_secret: Optional[str] = rest_field(
        name="clientSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """The Client Secret of this relying party application (in Azure Active Directory, this is also
     referred to as the Key). This setting is optional. If no client secret is configured, the
     OpenID Connect implicit auth flow is used to authenticate end users. Otherwise, the OpenID
     Connect Authorization Code Flow is used to authenticate end users. More information on OpenID
     Connect: `http://openid.net/specs/openid-connect-core-1_0.html
     <http://openid.net/specs/openid-connect-core-1_0.html>`_."""
    client_secret_setting_name: Optional[str] = rest_field(
        name="clientSecretSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The app setting name that contains the client secret of the relying party application."""
    client_secret_certificate_thumbprint: Optional[str] = rest_field(
        name="clientSecretCertificateThumbprint", visibility=["read", "create", "update", "delete", "query"]
    )
    """An alternative to the client secret, that is the thumbprint of a certificate used for signing
     purposes. This property acts as a replacement for the Client Secret. It is also optional."""
    issuer: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The OpenID Connect Issuer URI that represents the entity which issues access tokens for this
     application. When using Azure Active Directory, this value is the URI of the directory tenant,
     e.g. ``https://sts.windows.net/{tenant-guid}/``. This URI is a case-sensitive identifier for
     the token issuer. More information on OpenID Connect Discovery:
     `http://openid.net/specs/openid-connect-discovery-1_0.html
     <http://openid.net/specs/openid-connect-discovery-1_0.html>`_."""
    validate_issuer: Optional[bool] = rest_field(
        name="validateIssuer", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets a value indicating whether the issuer should be a valid HTTPS url and be validated as
     such."""
    allowed_audiences: Optional[list[str]] = rest_field(
        name="allowedAudiences", visibility=["read", "create", "update", "delete", "query"]
    )
    """Allowed audience values to consider when validating JSON Web Tokens issued by Azure Active
     Directory. Note that the <code>ClientID</code> value is always considered an allowed audience,
     regardless of this setting."""
    additional_login_params: Optional[list[str]] = rest_field(
        name="additionalLoginParams", visibility=["read", "create", "update", "delete", "query"]
    )
    """Login parameters to send to the OpenID Connect authorization endpoint when a user logs in. Each
     parameter must be in the form \"key=value\"."""
    aad_claims_authorization: Optional[str] = rest_field(
        name="aadClaimsAuthorization", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets a JSON string containing the Azure AD Acl settings."""
    google_client_id: Optional[str] = rest_field(
        name="googleClientId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The OpenID Connect Client ID for the Google web application. This setting is required for
     enabling Google Sign-In. Google Sign-In documentation:
     `https://developers.google.com/identity/sign-in/web/
     <https://developers.google.com/identity/sign-in/web/>`_."""
    google_client_secret: Optional[str] = rest_field(
        name="googleClientSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """The client secret associated with the Google web application. This setting is required for
     enabling Google Sign-In. Google Sign-In documentation:
     `https://developers.google.com/identity/sign-in/web/
     <https://developers.google.com/identity/sign-in/web/>`_."""
    google_client_secret_setting_name: Optional[str] = rest_field(
        name="googleClientSecretSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The app setting name that contains the client secret associated with the Google web
     application."""
    google_o_auth_scopes: Optional[list[str]] = rest_field(
        name="googleOAuthScopes", visibility=["read", "create", "update", "delete", "query"]
    )
    """The OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. This
     setting is optional. If not specified, \"openid\", \"profile\", and \"email\" are used as
     default scopes. Google Sign-In documentation:
     `https://developers.google.com/identity/sign-in/web/
     <https://developers.google.com/identity/sign-in/web/>`_."""
    facebook_app_id: Optional[str] = rest_field(
        name="facebookAppId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The App ID of the Facebook app used for login. This setting is required for enabling Facebook
     Login. Facebook Login documentation: `https://developers.facebook.com/docs/facebook-login
     <https://developers.facebook.com/docs/facebook-login>`_."""
    facebook_app_secret: Optional[str] = rest_field(
        name="facebookAppSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """The App Secret of the Facebook app used for Facebook Login. This setting is required for
     enabling Facebook Login. Facebook Login documentation:
     `https://developers.facebook.com/docs/facebook-login
     <https://developers.facebook.com/docs/facebook-login>`_."""
    facebook_app_secret_setting_name: Optional[str] = rest_field(
        name="facebookAppSecretSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The app setting name that contains the app secret used for Facebook Login."""
    facebook_o_auth_scopes: Optional[list[str]] = rest_field(
        name="facebookOAuthScopes", visibility=["read", "create", "update", "delete", "query"]
    )
    """The OAuth 2.0 scopes that will be requested as part of Facebook Login authentication. This
     setting is optional. Facebook Login documentation:
     `https://developers.facebook.com/docs/facebook-login
     <https://developers.facebook.com/docs/facebook-login>`_."""
    git_hub_client_id: Optional[str] = rest_field(
        name="gitHubClientId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The Client Id of the GitHub app used for login. This setting is required for enabling Github
     login."""
    git_hub_client_secret: Optional[str] = rest_field(
        name="gitHubClientSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """The Client Secret of the GitHub app used for Github Login. This setting is required for
     enabling Github login."""
    git_hub_client_secret_setting_name: Optional[str] = rest_field(
        name="gitHubClientSecretSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The app setting name that contains the client secret of the Github app used for GitHub Login."""
    git_hub_o_auth_scopes: Optional[list[str]] = rest_field(
        name="gitHubOAuthScopes", visibility=["read", "create", "update", "delete", "query"]
    )
    """The OAuth 2.0 scopes that will be requested as part of GitHub Login authentication. This
     setting is optional."""
    twitter_consumer_key: Optional[str] = rest_field(
        name="twitterConsumerKey", visibility=["read", "create", "update", "delete", "query"]
    )
    """The OAuth 1.0a consumer key of the Twitter application used for sign-in. This setting is
     required for enabling Twitter Sign-In. Twitter Sign-In documentation:
     `https://dev.twitter.com/web/sign-in <https://dev.twitter.com/web/sign-in>`_."""
    twitter_consumer_secret: Optional[str] = rest_field(
        name="twitterConsumerSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """The OAuth 1.0a consumer secret of the Twitter application used for sign-in. This setting is
     required for enabling Twitter Sign-In. Twitter Sign-In documentation:
     `https://dev.twitter.com/web/sign-in <https://dev.twitter.com/web/sign-in>`_."""
    twitter_consumer_secret_setting_name: Optional[str] = rest_field(
        name="twitterConsumerSecretSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application
     used for sign-in."""
    microsoft_account_client_id: Optional[str] = rest_field(
        name="microsoftAccountClientId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The OAuth 2.0 client ID that was created for the app used for authentication. This setting is
     required for enabling Microsoft Account authentication. Microsoft Account OAuth documentation:
     `https://dev.onedrive.com/auth/msa_oauth.htm <https://dev.onedrive.com/auth/msa_oauth.htm>`_."""
    microsoft_account_client_secret: Optional[str] = rest_field(
        name="microsoftAccountClientSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """The OAuth 2.0 client secret that was created for the app used for authentication. This setting
     is required for enabling Microsoft Account authentication. Microsoft Account OAuth
     documentation: `https://dev.onedrive.com/auth/msa_oauth.htm
     <https://dev.onedrive.com/auth/msa_oauth.htm>`_."""
    microsoft_account_client_secret_setting_name: Optional[str] = rest_field(
        name="microsoftAccountClientSecretSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The app setting name containing the OAuth 2.0 client secret that was created for the app used
     for authentication."""
    microsoft_account_o_auth_scopes: Optional[list[str]] = rest_field(
        name="microsoftAccountOAuthScopes", visibility=["read", "create", "update", "delete", "query"]
    )
    """The OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. This
     setting is optional. If not specified, \"wl.basic\" is used as the default scope. Microsoft
     Account Scopes and permissions documentation:
     `https://msdn.microsoft.com/en-us/library/dn631845.aspx
     <https://msdn.microsoft.com/en-us/library/dn631845.aspx>`_."""
    is_auth_from_file: Optional[str] = rest_field(
        name="isAuthFromFile", visibility=["read", "create", "update", "delete", "query"]
    )
    """\"true\" if the auth config settings should be read from a file, \"false\" otherwise."""
    auth_file_path: Optional[str] = rest_field(
        name="authFilePath", visibility=["read", "create", "update", "delete", "query"]
    )
    """The path of the config file containing auth settings. If the path is relative, base will the
     site's root directory."""
    config_version: Optional[str] = rest_field(
        name="configVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """The ConfigVersion of the Authentication / Authorization feature in use for the current app. The
     setting in this value can control the behavior of the control plane for Authentication /
     Authorization."""

    @overload
    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        enabled: Optional[bool] = None,
        runtime_version: Optional[str] = None,
        unauthenticated_client_action: Optional[Union[str, "_models.UnauthenticatedClientAction"]] = None,
        token_store_enabled: Optional[bool] = None,
        allowed_external_redirect_urls: Optional[list[str]] = None,
        default_provider: Optional[Union[str, "_models.BuiltInAuthenticationProvider"]] = None,
        token_refresh_extension_hours: Optional[float] = None,
        client_id: Optional[str] = None,
        client_secret: Optional[str] = None,
        client_secret_setting_name: Optional[str] = None,
        client_secret_certificate_thumbprint: Optional[str] = None,
        issuer: Optional[str] = None,
        validate_issuer: Optional[bool] = None,
        allowed_audiences: Optional[list[str]] = None,
        additional_login_params: Optional[list[str]] = None,
        aad_claims_authorization: Optional[str] = None,
        google_client_id: Optional[str] = None,
        google_client_secret: Optional[str] = None,
        google_client_secret_setting_name: Optional[str] = None,
        google_o_auth_scopes: Optional[list[str]] = None,
        facebook_app_id: Optional[str] = None,
        facebook_app_secret: Optional[str] = None,
        facebook_app_secret_setting_name: Optional[str] = None,
        facebook_o_auth_scopes: Optional[list[str]] = None,
        git_hub_client_id: Optional[str] = None,
        git_hub_client_secret: Optional[str] = None,
        git_hub_client_secret_setting_name: Optional[str] = None,
        git_hub_o_auth_scopes: Optional[list[str]] = None,
        twitter_consumer_key: Optional[str] = None,
        twitter_consumer_secret: Optional[str] = None,
        twitter_consumer_secret_setting_name: Optional[str] = None,
        microsoft_account_client_id: Optional[str] = None,
        microsoft_account_client_secret: Optional[str] = None,
        microsoft_account_client_secret_setting_name: Optional[str] = None,
        microsoft_account_o_auth_scopes: Optional[list[str]] = None,
        is_auth_from_file: Optional[str] = None,
        auth_file_path: Optional[str] = None,
        config_version: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteAuthSettingsV2(ProxyResource):
    """Configuration settings for the Azure App Service Authentication / Authorization V2 feature.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: SiteAuthSettingsV2 resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SiteAuthSettingsV2Properties
    :ivar kind: Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind.
    :vartype kind: str
    """

    properties: Optional["_models.SiteAuthSettingsV2Properties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SiteAuthSettingsV2 resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind."""

    __flattened_items = ["platform", "global_validation", "identity_providers", "login", "http_settings"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.SiteAuthSettingsV2Properties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SiteAuthSettingsV2Properties(_Model):
    """SiteAuthSettingsV2 resource specific properties.

    :ivar platform: The configuration settings of the platform of App Service
     Authentication/Authorization.
    :vartype platform: ~azure.mgmt.web.models.AuthPlatform
    :ivar global_validation: The configuration settings that determines the validation flow of
     users using App Service Authentication/Authorization.
    :vartype global_validation: ~azure.mgmt.web.models.GlobalValidation
    :ivar identity_providers: The configuration settings of each of the identity providers used to
     configure App Service Authentication/Authorization.
    :vartype identity_providers: ~azure.mgmt.web.models.IdentityProviders
    :ivar login: The configuration settings of the login flow of users using App Service
     Authentication/Authorization.
    :vartype login: ~azure.mgmt.web.models.Login
    :ivar http_settings: The configuration settings of the HTTP requests for authentication and
     authorization requests made against App Service Authentication/Authorization.
    :vartype http_settings: ~azure.mgmt.web.models.HttpSettings
    """

    platform: Optional["_models.AuthPlatform"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The configuration settings of the platform of App Service Authentication/Authorization."""
    global_validation: Optional["_models.GlobalValidation"] = rest_field(
        name="globalValidation", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings that determines the validation flow of users using App Service
     Authentication/Authorization."""
    identity_providers: Optional["_models.IdentityProviders"] = rest_field(
        name="identityProviders", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of each of the identity providers used to configure App Service
     Authentication/Authorization."""
    login: Optional["_models.Login"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The configuration settings of the login flow of users using App Service
     Authentication/Authorization."""
    http_settings: Optional["_models.HttpSettings"] = rest_field(
        name="httpSettings", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the HTTP requests for authentication and authorization requests
     made against App Service Authentication/Authorization."""

    @overload
    def __init__(
        self,
        *,
        platform: Optional["_models.AuthPlatform"] = None,
        global_validation: Optional["_models.GlobalValidation"] = None,
        identity_providers: Optional["_models.IdentityProviders"] = None,
        login: Optional["_models.Login"] = None,
        http_settings: Optional["_models.HttpSettings"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteCloneability(_Model):
    """Represents whether or not an app is cloneable.

    :ivar result: Name of app. Known values are: "Cloneable", "PartiallyCloneable", and
     "NotCloneable".
    :vartype result: str or ~azure.mgmt.web.models.CloneAbilityResult
    :ivar blocking_features: List of features enabled on app that prevent cloning.
    :vartype blocking_features: list[~azure.mgmt.web.models.SiteCloneabilityCriterion]
    :ivar unsupported_features: List of features enabled on app that are non-blocking but cannot be
     cloned. The app can still be cloned but the features in this list will not be set up on cloned
     app.
    :vartype unsupported_features: list[~azure.mgmt.web.models.SiteCloneabilityCriterion]
    :ivar blocking_characteristics: List of blocking application characteristics.
    :vartype blocking_characteristics: list[~azure.mgmt.web.models.SiteCloneabilityCriterion]
    """

    result: Optional[Union[str, "_models.CloneAbilityResult"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Name of app. Known values are: \"Cloneable\", \"PartiallyCloneable\", and \"NotCloneable\"."""
    blocking_features: Optional[list["_models.SiteCloneabilityCriterion"]] = rest_field(
        name="blockingFeatures", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of features enabled on app that prevent cloning."""
    unsupported_features: Optional[list["_models.SiteCloneabilityCriterion"]] = rest_field(
        name="unsupportedFeatures", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of features enabled on app that are non-blocking but cannot be cloned. The app can still
     be cloned but the features in this list will not be set up on cloned app."""
    blocking_characteristics: Optional[list["_models.SiteCloneabilityCriterion"]] = rest_field(
        name="blockingCharacteristics", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of blocking application characteristics."""

    @overload
    def __init__(
        self,
        *,
        result: Optional[Union[str, "_models.CloneAbilityResult"]] = None,
        blocking_features: Optional[list["_models.SiteCloneabilityCriterion"]] = None,
        unsupported_features: Optional[list["_models.SiteCloneabilityCriterion"]] = None,
        blocking_characteristics: Optional[list["_models.SiteCloneabilityCriterion"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteCloneabilityCriterion(_Model):
    """An app cloneability criterion.

    :ivar name: Name of criterion.
    :vartype name: str
    :ivar description: Description of criterion.
    :vartype description: str
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of criterion."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Description of criterion."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        description: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteConfig(_Model):
    """Configuration of an App Service app.

    :ivar number_of_workers: Number of workers.
    :vartype number_of_workers: int
    :ivar default_documents: Default documents.
    :vartype default_documents: list[str]
    :ivar net_framework_version: .NET Framework version.
    :vartype net_framework_version: str
    :ivar php_version: Version of PHP.
    :vartype php_version: str
    :ivar python_version: Version of Python.
    :vartype python_version: str
    :ivar node_version: Version of Node.js.
    :vartype node_version: str
    :ivar power_shell_version: Version of PowerShell.
    :vartype power_shell_version: str
    :ivar linux_fx_version: Linux App Framework and version.
    :vartype linux_fx_version: str
    :ivar windows_fx_version: Xenon App Framework and version.
    :vartype windows_fx_version: str
    :ivar request_tracing_enabled: <code>true</code> if request tracing is enabled; otherwise,
     <code>false</code>.
    :vartype request_tracing_enabled: bool
    :ivar request_tracing_expiration_time: Request tracing expiration time.
    :vartype request_tracing_expiration_time: ~datetime.datetime
    :ivar remote_debugging_enabled: <code>true</code> if remote debugging is enabled; otherwise,
     <code>false</code>.
    :vartype remote_debugging_enabled: bool
    :ivar remote_debugging_version: Remote debugging version.
    :vartype remote_debugging_version: str
    :ivar http_logging_enabled: <code>true</code> if HTTP logging is enabled; otherwise,
     <code>false</code>.
    :vartype http_logging_enabled: bool
    :ivar acr_use_managed_identity_creds: Flag to use Managed Identity Creds for ACR pull.
    :vartype acr_use_managed_identity_creds: bool
    :ivar acr_user_managed_identity_id: If using user managed identity, the user managed identity
     ClientId.
    :vartype acr_user_managed_identity_id: str
    :ivar logs_directory_size_limit: HTTP logs directory size limit.
    :vartype logs_directory_size_limit: int
    :ivar detailed_error_logging_enabled: <code>true</code> if detailed error logging is enabled;
     otherwise, <code>false</code>.
    :vartype detailed_error_logging_enabled: bool
    :ivar publishing_username: Publishing user name.
    :vartype publishing_username: str
    :ivar app_settings: Application settings. This property is not returned in response to normal
     create and read requests since it may contain sensitive information.
    :vartype app_settings: list[~azure.mgmt.web.models.NameValuePair]
    :ivar metadata: Application metadata. This property cannot be retrieved, since it may contain
     secrets.
    :vartype metadata: list[~azure.mgmt.web.models.NameValuePair]
    :ivar connection_strings: Connection strings. This property is not returned in response to
     normal create and read requests since it may contain sensitive information.
    :vartype connection_strings: list[~azure.mgmt.web.models.ConnStringInfo]
    :ivar machine_key: Site MachineKey.
    :vartype machine_key: ~azure.mgmt.web.models.SiteMachineKey
    :ivar handler_mappings: Handler mappings.
    :vartype handler_mappings: list[~azure.mgmt.web.models.HandlerMapping]
    :ivar document_root: Document root.
    :vartype document_root: str
    :ivar scm_type: SCM type. Known values are: "None", "Dropbox", "Tfs", "LocalGit", "GitHub",
     "CodePlexGit", "CodePlexHg", "BitbucketGit", "BitbucketHg", "ExternalGit", "ExternalHg",
     "OneDrive", "VSO", and "VSTSRM".
    :vartype scm_type: str or ~azure.mgmt.web.models.ScmType
    :ivar use32_bit_worker_process: <code>true</code> to use 32-bit worker process; otherwise,
     <code>false</code>.
    :vartype use32_bit_worker_process: bool
    :ivar web_sockets_enabled: <code>true</code> if WebSocket is enabled; otherwise,
     <code>false</code>.
    :vartype web_sockets_enabled: bool
    :ivar always_on: <code>true</code> if Always On is enabled; otherwise, <code>false</code>.
    :vartype always_on: bool
    :ivar java_version: Java version.
    :vartype java_version: str
    :ivar java_container: Java container.
    :vartype java_container: str
    :ivar java_container_version: Java container version.
    :vartype java_container_version: str
    :ivar app_command_line: App command line to launch.
    :vartype app_command_line: str
    :ivar managed_pipeline_mode: Managed pipeline mode. Known values are: "Integrated" and
     "Classic".
    :vartype managed_pipeline_mode: str or ~azure.mgmt.web.models.ManagedPipelineMode
    :ivar virtual_applications: Virtual applications.
    :vartype virtual_applications: list[~azure.mgmt.web.models.VirtualApplication]
    :ivar load_balancing: Site load balancing. Known values are: "WeightedRoundRobin",
     "LeastRequests", "LeastResponseTime", "WeightedTotalTraffic", "RequestHash",
     "PerSiteRoundRobin", and "LeastRequestsWithTieBreaker".
    :vartype load_balancing: str or ~azure.mgmt.web.models.SiteLoadBalancing
    :ivar experiments: This is work around for polymorphic types.
    :vartype experiments: ~azure.mgmt.web.models.Experiments
    :ivar limits: Site limits.
    :vartype limits: ~azure.mgmt.web.models.SiteLimits
    :ivar auto_heal_enabled: <code>true</code> if Auto Heal is enabled; otherwise,
     <code>false</code>.
    :vartype auto_heal_enabled: bool
    :ivar auto_heal_rules: Auto Heal rules.
    :vartype auto_heal_rules: ~azure.mgmt.web.models.AutoHealRules
    :ivar tracing_options: Tracing options.
    :vartype tracing_options: str
    :ivar vnet_name: Virtual Network name.
    :vartype vnet_name: str
    :ivar vnet_route_all_enabled: Virtual Network Route All enabled. This causes all outbound
     traffic to have Virtual Network Security Groups and User Defined Routes applied.
    :vartype vnet_route_all_enabled: bool
    :ivar vnet_private_ports_count: The number of private ports assigned to this app. These will be
     assigned dynamically on runtime.
    :vartype vnet_private_ports_count: int
    :ivar cors: Cross-Origin Resource Sharing (CORS) settings.
    :vartype cors: ~azure.mgmt.web.models.CorsSettings
    :ivar push: Push endpoint settings.
    :vartype push: ~azure.mgmt.web.models.PushSettings
    :ivar api_definition: Information about the formal API definition for the app.
    :vartype api_definition: ~azure.mgmt.web.models.ApiDefinitionInfo
    :ivar api_management_config: Azure API management settings linked to the app.
    :vartype api_management_config: ~azure.mgmt.web.models.ApiManagementConfig
    :ivar auto_swap_slot_name: Auto-swap slot name.
    :vartype auto_swap_slot_name: str
    :ivar local_my_sql_enabled: <code>true</code> to enable local MySQL; otherwise,
     <code>false</code>.
    :vartype local_my_sql_enabled: bool
    :ivar managed_service_identity_id: Managed Service Identity Id.
    :vartype managed_service_identity_id: int
    :ivar x_managed_service_identity_id: Explicit Managed Service Identity Id.
    :vartype x_managed_service_identity_id: int
    :ivar key_vault_reference_identity: Identity to use for Key Vault Reference authentication.
    :vartype key_vault_reference_identity: str
    :ivar ip_security_restrictions: IP security restrictions for main.
    :vartype ip_security_restrictions: list[~azure.mgmt.web.models.IpSecurityRestriction]
    :ivar ip_security_restrictions_default_action: Default action for main access restriction if no
     rules are matched. Known values are: "Allow" and "Deny".
    :vartype ip_security_restrictions_default_action: str or ~azure.mgmt.web.models.DefaultAction
    :ivar scm_ip_security_restrictions: IP security restrictions for scm.
    :vartype scm_ip_security_restrictions: list[~azure.mgmt.web.models.IpSecurityRestriction]
    :ivar scm_ip_security_restrictions_default_action: Default action for scm access restriction if
     no rules are matched. Known values are: "Allow" and "Deny".
    :vartype scm_ip_security_restrictions_default_action: str or
     ~azure.mgmt.web.models.DefaultAction
    :ivar scm_ip_security_restrictions_use_main: IP security restrictions for scm to use main.
    :vartype scm_ip_security_restrictions_use_main: bool
    :ivar http20_enabled: Http20Enabled: configures a web site to allow clients to connect over
     http2.0.
    :vartype http20_enabled: bool
    :ivar http20_proxy_flag: Http20ProxyFlag: Configures a website to allow http2.0 to pass be
     proxied all the way to the app. 0 = disabled, 1 = pass through all http2 traffic, 2 = pass
     through gRPC only.
    :vartype http20_proxy_flag: int
    :ivar min_tls_version: MinTlsVersion: configures the minimum version of TLS required for SSL
     requests. Known values are: "1.0", "1.1", "1.2", and "1.3".
    :vartype min_tls_version: str or ~azure.mgmt.web.models.SupportedTlsVersions
    :ivar min_tls_cipher_suite: The minimum strength TLS cipher suite allowed for an application.
     Known values are: "TLS_AES_256_GCM_SHA384", "TLS_AES_128_GCM_SHA256",
     "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
     "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
     "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
     "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
     "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "TLS_RSA_WITH_AES_256_GCM_SHA384",
     "TLS_RSA_WITH_AES_128_GCM_SHA256", "TLS_RSA_WITH_AES_256_CBC_SHA256",
     "TLS_RSA_WITH_AES_128_CBC_SHA256", "TLS_RSA_WITH_AES_256_CBC_SHA", and
     "TLS_RSA_WITH_AES_128_CBC_SHA".
    :vartype min_tls_cipher_suite: str or ~azure.mgmt.web.models.TlsCipherSuites
    :ivar scm_min_tls_version: ScmMinTlsVersion: configures the minimum version of TLS required for
     SSL requests for SCM site. Known values are: "1.0", "1.1", "1.2", and "1.3".
    :vartype scm_min_tls_version: str or ~azure.mgmt.web.models.SupportedTlsVersions
    :ivar ftps_state: State of FTP / FTPS service. Known values are: "AllAllowed", "FtpsOnly", and
     "Disabled".
    :vartype ftps_state: str or ~azure.mgmt.web.models.FtpsState
    :ivar pre_warmed_instance_count: Number of preWarmed instances. This setting only applies to
     the Consumption and Elastic Plans.
    :vartype pre_warmed_instance_count: int
    :ivar function_app_scale_limit: Maximum number of workers that a site can scale out to. This
     setting only applies to the Consumption and Elastic Premium Plans.
    :vartype function_app_scale_limit: int
    :ivar elastic_web_app_scale_limit: Maximum number of workers that a site can scale out to. This
     setting only applies to apps in plans where ElasticScaleEnabled is <code>true</code>.
    :vartype elastic_web_app_scale_limit: int
    :ivar health_check_path: Health check path.
    :vartype health_check_path: str
    :ivar functions_runtime_scale_monitoring_enabled: Gets or sets a value indicating whether
     functions runtime scale monitoring is enabled. When enabled, the ScaleController will not
     monitor event sources directly, but will instead call to the runtime to get scale status.
    :vartype functions_runtime_scale_monitoring_enabled: bool
    :ivar website_time_zone: Sets the time zone a site uses for generating timestamps. Compatible
     with Linux and Windows App Service. Setting the WEBSITE_TIME_ZONE app setting takes precedence
     over this config. For Linux, expects tz database values `https://www.iana.org/time-zones
     <https://www.iana.org/time-zones>`_ (for a quick reference see
     `https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
     <https://en.wikipedia.org/wiki/List_of_tz_database_time_zones>`_). For Windows, expects one of
     the time zones listed under HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows
     NT\\CurrentVersion\\Time Zones.
    :vartype website_time_zone: str
    :ivar minimum_elastic_instance_count: Number of minimum instance count for a site This setting
     only applies to the Elastic Plans.
    :vartype minimum_elastic_instance_count: int
    :ivar azure_storage_accounts: List of Azure Storage Accounts.
    :vartype azure_storage_accounts: dict[str, ~azure.mgmt.web.models.AzureStorageInfoValue]
    :ivar public_network_access: Property to allow or block all public traffic.
    :vartype public_network_access: str
    """

    number_of_workers: Optional[int] = rest_field(
        name="numberOfWorkers", visibility=["read", "create", "update", "delete", "query"]
    )
    """Number of workers."""
    default_documents: Optional[list[str]] = rest_field(
        name="defaultDocuments", visibility=["read", "create", "update", "delete", "query"]
    )
    """Default documents."""
    net_framework_version: Optional[str] = rest_field(
        name="netFrameworkVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """.NET Framework version."""
    php_version: Optional[str] = rest_field(
        name="phpVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Version of PHP."""
    python_version: Optional[str] = rest_field(
        name="pythonVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Version of Python."""
    node_version: Optional[str] = rest_field(
        name="nodeVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Version of Node.js."""
    power_shell_version: Optional[str] = rest_field(
        name="powerShellVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Version of PowerShell."""
    linux_fx_version: Optional[str] = rest_field(
        name="linuxFxVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Linux App Framework and version."""
    windows_fx_version: Optional[str] = rest_field(
        name="windowsFxVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Xenon App Framework and version."""
    request_tracing_enabled: Optional[bool] = rest_field(
        name="requestTracingEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if request tracing is enabled; otherwise, <code>false</code>."""
    request_tracing_expiration_time: Optional[datetime.datetime] = rest_field(
        name="requestTracingExpirationTime",
        visibility=["read", "create", "update", "delete", "query"],
        format="rfc3339",
    )
    """Request tracing expiration time."""
    remote_debugging_enabled: Optional[bool] = rest_field(
        name="remoteDebuggingEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if remote debugging is enabled; otherwise, <code>false</code>."""
    remote_debugging_version: Optional[str] = rest_field(
        name="remoteDebuggingVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Remote debugging version."""
    http_logging_enabled: Optional[bool] = rest_field(
        name="httpLoggingEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if HTTP logging is enabled; otherwise, <code>false</code>."""
    acr_use_managed_identity_creds: Optional[bool] = rest_field(
        name="acrUseManagedIdentityCreds", visibility=["read", "create", "update", "delete", "query"]
    )
    """Flag to use Managed Identity Creds for ACR pull."""
    acr_user_managed_identity_id: Optional[str] = rest_field(
        name="acrUserManagedIdentityID", visibility=["read", "create", "update", "delete", "query"]
    )
    """If using user managed identity, the user managed identity ClientId."""
    logs_directory_size_limit: Optional[int] = rest_field(
        name="logsDirectorySizeLimit", visibility=["read", "create", "update", "delete", "query"]
    )
    """HTTP logs directory size limit."""
    detailed_error_logging_enabled: Optional[bool] = rest_field(
        name="detailedErrorLoggingEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if detailed error logging is enabled; otherwise, <code>false</code>."""
    publishing_username: Optional[str] = rest_field(
        name="publishingUsername", visibility=["read", "create", "update", "delete", "query"]
    )
    """Publishing user name."""
    app_settings: Optional[list["_models.NameValuePair"]] = rest_field(
        name="appSettings", visibility=["create", "update"]
    )
    """Application settings. This property is not returned in response to normal create and read
     requests since it may contain sensitive information."""
    metadata: Optional[list["_models.NameValuePair"]] = rest_field(visibility=["create", "update"])
    """Application metadata. This property cannot be retrieved, since it may contain secrets."""
    connection_strings: Optional[list["_models.ConnStringInfo"]] = rest_field(
        name="connectionStrings", visibility=["create", "update"]
    )
    """Connection strings. This property is not returned in response to normal create and read
     requests since it may contain sensitive information."""
    machine_key: Optional["_models.SiteMachineKey"] = rest_field(name="machineKey", visibility=["read"])
    """Site MachineKey."""
    handler_mappings: Optional[list["_models.HandlerMapping"]] = rest_field(
        name="handlerMappings", visibility=["read", "create", "update", "delete", "query"]
    )
    """Handler mappings."""
    document_root: Optional[str] = rest_field(
        name="documentRoot", visibility=["read", "create", "update", "delete", "query"]
    )
    """Document root."""
    scm_type: Optional[Union[str, "_models.ScmType"]] = rest_field(
        name="scmType", visibility=["read", "create", "update", "delete", "query"]
    )
    """SCM type. Known values are: \"None\", \"Dropbox\", \"Tfs\", \"LocalGit\", \"GitHub\",
     \"CodePlexGit\", \"CodePlexHg\", \"BitbucketGit\", \"BitbucketHg\", \"ExternalGit\",
     \"ExternalHg\", \"OneDrive\", \"VSO\", and \"VSTSRM\"."""
    use32_bit_worker_process: Optional[bool] = rest_field(
        name="use32BitWorkerProcess", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to use 32-bit worker process; otherwise, <code>false</code>."""
    web_sockets_enabled: Optional[bool] = rest_field(
        name="webSocketsEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if WebSocket is enabled; otherwise, <code>false</code>."""
    always_on: Optional[bool] = rest_field(name="alwaysOn", visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> if Always On is enabled; otherwise, <code>false</code>."""
    java_version: Optional[str] = rest_field(
        name="javaVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Java version."""
    java_container: Optional[str] = rest_field(
        name="javaContainer", visibility=["read", "create", "update", "delete", "query"]
    )
    """Java container."""
    java_container_version: Optional[str] = rest_field(
        name="javaContainerVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Java container version."""
    app_command_line: Optional[str] = rest_field(
        name="appCommandLine", visibility=["read", "create", "update", "delete", "query"]
    )
    """App command line to launch."""
    managed_pipeline_mode: Optional[Union[str, "_models.ManagedPipelineMode"]] = rest_field(
        name="managedPipelineMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """Managed pipeline mode. Known values are: \"Integrated\" and \"Classic\"."""
    virtual_applications: Optional[list["_models.VirtualApplication"]] = rest_field(
        name="virtualApplications", visibility=["read", "create", "update", "delete", "query"]
    )
    """Virtual applications."""
    load_balancing: Optional[Union[str, "_models.SiteLoadBalancing"]] = rest_field(
        name="loadBalancing", visibility=["read", "create", "update", "delete", "query"]
    )
    """Site load balancing. Known values are: \"WeightedRoundRobin\", \"LeastRequests\",
     \"LeastResponseTime\", \"WeightedTotalTraffic\", \"RequestHash\", \"PerSiteRoundRobin\", and
     \"LeastRequestsWithTieBreaker\"."""
    experiments: Optional["_models.Experiments"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """This is work around for polymorphic types."""
    limits: Optional["_models.SiteLimits"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Site limits."""
    auto_heal_enabled: Optional[bool] = rest_field(
        name="autoHealEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if Auto Heal is enabled; otherwise, <code>false</code>."""
    auto_heal_rules: Optional["_models.AutoHealRules"] = rest_field(
        name="autoHealRules", visibility=["read", "create", "update", "delete", "query"]
    )
    """Auto Heal rules."""
    tracing_options: Optional[str] = rest_field(
        name="tracingOptions", visibility=["read", "create", "update", "delete", "query"]
    )
    """Tracing options."""
    vnet_name: Optional[str] = rest_field(name="vnetName", visibility=["read", "create"])
    """Virtual Network name."""
    vnet_route_all_enabled: Optional[bool] = rest_field(
        name="vnetRouteAllEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Virtual Network Route All enabled. This causes all outbound traffic to have Virtual Network
     Security Groups and User Defined Routes applied."""
    vnet_private_ports_count: Optional[int] = rest_field(
        name="vnetPrivatePortsCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """The number of private ports assigned to this app. These will be assigned dynamically on
     runtime."""
    cors: Optional["_models.CorsSettings"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Cross-Origin Resource Sharing (CORS) settings."""
    push: Optional["_models.PushSettings"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Push endpoint settings."""
    api_definition: Optional["_models.ApiDefinitionInfo"] = rest_field(
        name="apiDefinition", visibility=["read", "create", "update", "delete", "query"]
    )
    """Information about the formal API definition for the app."""
    api_management_config: Optional["_models.ApiManagementConfig"] = rest_field(
        name="apiManagementConfig", visibility=["read", "create", "update", "delete", "query"]
    )
    """Azure API management settings linked to the app."""
    auto_swap_slot_name: Optional[str] = rest_field(
        name="autoSwapSlotName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Auto-swap slot name."""
    local_my_sql_enabled: Optional[bool] = rest_field(
        name="localMySqlEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to enable local MySQL; otherwise, <code>false</code>."""
    managed_service_identity_id: Optional[int] = rest_field(
        name="managedServiceIdentityId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Managed Service Identity Id."""
    x_managed_service_identity_id: Optional[int] = rest_field(
        name="xManagedServiceIdentityId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Explicit Managed Service Identity Id."""
    key_vault_reference_identity: Optional[str] = rest_field(
        name="keyVaultReferenceIdentity", visibility=["read", "create", "update", "delete", "query"]
    )
    """Identity to use for Key Vault Reference authentication."""
    ip_security_restrictions: Optional[list["_models.IpSecurityRestriction"]] = rest_field(
        name="ipSecurityRestrictions", visibility=["read", "create", "update", "delete", "query"]
    )
    """IP security restrictions for main."""
    ip_security_restrictions_default_action: Optional[Union[str, "_models.DefaultAction"]] = rest_field(
        name="ipSecurityRestrictionsDefaultAction", visibility=["read", "create", "update", "delete", "query"]
    )
    """Default action for main access restriction if no rules are matched. Known values are: \"Allow\"
     and \"Deny\"."""
    scm_ip_security_restrictions: Optional[list["_models.IpSecurityRestriction"]] = rest_field(
        name="scmIpSecurityRestrictions", visibility=["read", "create", "update", "delete", "query"]
    )
    """IP security restrictions for scm."""
    scm_ip_security_restrictions_default_action: Optional[Union[str, "_models.DefaultAction"]] = rest_field(
        name="scmIpSecurityRestrictionsDefaultAction", visibility=["read", "create", "update", "delete", "query"]
    )
    """Default action for scm access restriction if no rules are matched. Known values are: \"Allow\"
     and \"Deny\"."""
    scm_ip_security_restrictions_use_main: Optional[bool] = rest_field(
        name="scmIpSecurityRestrictionsUseMain", visibility=["read", "create", "update", "delete", "query"]
    )
    """IP security restrictions for scm to use main."""
    http20_enabled: Optional[bool] = rest_field(
        name="http20Enabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Http20Enabled: configures a web site to allow clients to connect over http2.0."""
    http20_proxy_flag: Optional[int] = rest_field(
        name="http20ProxyFlag", visibility=["read", "create", "update", "delete", "query"]
    )
    """Http20ProxyFlag: Configures a website to allow http2.0 to pass be proxied all the way to the
     app. 0 = disabled, 1 = pass through all http2 traffic, 2 = pass through gRPC only."""
    min_tls_version: Optional[Union[str, "_models.SupportedTlsVersions"]] = rest_field(
        name="minTlsVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """MinTlsVersion: configures the minimum version of TLS required for SSL requests. Known values
     are: \"1.0\", \"1.1\", \"1.2\", and \"1.3\"."""
    min_tls_cipher_suite: Optional[Union[str, "_models.TlsCipherSuites"]] = rest_field(
        name="minTlsCipherSuite", visibility=["read", "create", "update", "delete", "query"]
    )
    """The minimum strength TLS cipher suite allowed for an application. Known values are:
     \"TLS_AES_256_GCM_SHA384\", \"TLS_AES_128_GCM_SHA256\",
     \"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\", \"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\",
     \"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\", \"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\",
     \"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\", \"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384\",
     \"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\", \"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\",
     \"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\", \"TLS_RSA_WITH_AES_256_GCM_SHA384\",
     \"TLS_RSA_WITH_AES_128_GCM_SHA256\", \"TLS_RSA_WITH_AES_256_CBC_SHA256\",
     \"TLS_RSA_WITH_AES_128_CBC_SHA256\", \"TLS_RSA_WITH_AES_256_CBC_SHA\", and
     \"TLS_RSA_WITH_AES_128_CBC_SHA\"."""
    scm_min_tls_version: Optional[Union[str, "_models.SupportedTlsVersions"]] = rest_field(
        name="scmMinTlsVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """ScmMinTlsVersion: configures the minimum version of TLS required for SSL requests for SCM site.
     Known values are: \"1.0\", \"1.1\", \"1.2\", and \"1.3\"."""
    ftps_state: Optional[Union[str, "_models.FtpsState"]] = rest_field(
        name="ftpsState", visibility=["read", "create", "update", "delete", "query"]
    )
    """State of FTP / FTPS service. Known values are: \"AllAllowed\", \"FtpsOnly\", and \"Disabled\"."""
    pre_warmed_instance_count: Optional[int] = rest_field(
        name="preWarmedInstanceCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """Number of preWarmed instances. This setting only applies to the Consumption and Elastic Plans."""
    function_app_scale_limit: Optional[int] = rest_field(
        name="functionAppScaleLimit", visibility=["read", "create", "update", "delete", "query"]
    )
    """Maximum number of workers that a site can scale out to. This setting only applies to the
     Consumption and Elastic Premium Plans."""
    elastic_web_app_scale_limit: Optional[int] = rest_field(
        name="elasticWebAppScaleLimit", visibility=["read", "create", "update", "delete", "query"]
    )
    """Maximum number of workers that a site can scale out to. This setting only applies to apps in
     plans where ElasticScaleEnabled is <code>true</code>."""
    health_check_path: Optional[str] = rest_field(
        name="healthCheckPath", visibility=["read", "create", "update", "delete", "query"]
    )
    """Health check path."""
    functions_runtime_scale_monitoring_enabled: Optional[bool] = rest_field(
        name="functionsRuntimeScaleMonitoringEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets or sets a value indicating whether functions runtime scale monitoring is enabled. When
     enabled, the ScaleController will not monitor event sources directly, but will instead call to
     the runtime to get scale status."""
    website_time_zone: Optional[str] = rest_field(
        name="websiteTimeZone", visibility=["read", "create", "update", "delete", "query"]
    )
    """Sets the time zone a site uses for generating timestamps. Compatible with Linux and Windows App
     Service. Setting the WEBSITE_TIME_ZONE app setting takes precedence over this config. For
     Linux, expects tz database values `https://www.iana.org/time-zones
     <https://www.iana.org/time-zones>`_ (for a quick reference see
     `https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
     <https://en.wikipedia.org/wiki/List_of_tz_database_time_zones>`_). For Windows, expects one of
     the time zones listed under HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows
     NT\\CurrentVersion\\Time Zones."""
    minimum_elastic_instance_count: Optional[int] = rest_field(
        name="minimumElasticInstanceCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """Number of minimum instance count for a site This setting only applies to the Elastic Plans."""
    azure_storage_accounts: Optional[dict[str, "_models.AzureStorageInfoValue"]] = rest_field(
        name="azureStorageAccounts", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of Azure Storage Accounts."""
    public_network_access: Optional[str] = rest_field(
        name="publicNetworkAccess", visibility=["read", "create", "update", "delete", "query"]
    )
    """Property to allow or block all public traffic."""

    @overload
    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        number_of_workers: Optional[int] = None,
        default_documents: Optional[list[str]] = None,
        net_framework_version: Optional[str] = None,
        php_version: Optional[str] = None,
        python_version: Optional[str] = None,
        node_version: Optional[str] = None,
        power_shell_version: Optional[str] = None,
        linux_fx_version: Optional[str] = None,
        windows_fx_version: Optional[str] = None,
        request_tracing_enabled: Optional[bool] = None,
        request_tracing_expiration_time: Optional[datetime.datetime] = None,
        remote_debugging_enabled: Optional[bool] = None,
        remote_debugging_version: Optional[str] = None,
        http_logging_enabled: Optional[bool] = None,
        acr_use_managed_identity_creds: Optional[bool] = None,
        acr_user_managed_identity_id: Optional[str] = None,
        logs_directory_size_limit: Optional[int] = None,
        detailed_error_logging_enabled: Optional[bool] = None,
        publishing_username: Optional[str] = None,
        app_settings: Optional[list["_models.NameValuePair"]] = None,
        metadata: Optional[list["_models.NameValuePair"]] = None,
        connection_strings: Optional[list["_models.ConnStringInfo"]] = None,
        handler_mappings: Optional[list["_models.HandlerMapping"]] = None,
        document_root: Optional[str] = None,
        scm_type: Optional[Union[str, "_models.ScmType"]] = None,
        use32_bit_worker_process: Optional[bool] = None,
        web_sockets_enabled: Optional[bool] = None,
        always_on: Optional[bool] = None,
        java_version: Optional[str] = None,
        java_container: Optional[str] = None,
        java_container_version: Optional[str] = None,
        app_command_line: Optional[str] = None,
        managed_pipeline_mode: Optional[Union[str, "_models.ManagedPipelineMode"]] = None,
        virtual_applications: Optional[list["_models.VirtualApplication"]] = None,
        load_balancing: Optional[Union[str, "_models.SiteLoadBalancing"]] = None,
        experiments: Optional["_models.Experiments"] = None,
        limits: Optional["_models.SiteLimits"] = None,
        auto_heal_enabled: Optional[bool] = None,
        auto_heal_rules: Optional["_models.AutoHealRules"] = None,
        tracing_options: Optional[str] = None,
        vnet_name: Optional[str] = None,
        vnet_route_all_enabled: Optional[bool] = None,
        vnet_private_ports_count: Optional[int] = None,
        cors: Optional["_models.CorsSettings"] = None,
        push: Optional["_models.PushSettings"] = None,
        api_definition: Optional["_models.ApiDefinitionInfo"] = None,
        api_management_config: Optional["_models.ApiManagementConfig"] = None,
        auto_swap_slot_name: Optional[str] = None,
        local_my_sql_enabled: Optional[bool] = None,
        managed_service_identity_id: Optional[int] = None,
        x_managed_service_identity_id: Optional[int] = None,
        key_vault_reference_identity: Optional[str] = None,
        ip_security_restrictions: Optional[list["_models.IpSecurityRestriction"]] = None,
        ip_security_restrictions_default_action: Optional[Union[str, "_models.DefaultAction"]] = None,
        scm_ip_security_restrictions: Optional[list["_models.IpSecurityRestriction"]] = None,
        scm_ip_security_restrictions_default_action: Optional[Union[str, "_models.DefaultAction"]] = None,
        scm_ip_security_restrictions_use_main: Optional[bool] = None,
        http20_enabled: Optional[bool] = None,
        http20_proxy_flag: Optional[int] = None,
        min_tls_version: Optional[Union[str, "_models.SupportedTlsVersions"]] = None,
        min_tls_cipher_suite: Optional[Union[str, "_models.TlsCipherSuites"]] = None,
        scm_min_tls_version: Optional[Union[str, "_models.SupportedTlsVersions"]] = None,
        ftps_state: Optional[Union[str, "_models.FtpsState"]] = None,
        pre_warmed_instance_count: Optional[int] = None,
        function_app_scale_limit: Optional[int] = None,
        elastic_web_app_scale_limit: Optional[int] = None,
        health_check_path: Optional[str] = None,
        functions_runtime_scale_monitoring_enabled: Optional[bool] = None,
        website_time_zone: Optional[str] = None,
        minimum_elastic_instance_count: Optional[int] = None,
        azure_storage_accounts: Optional[dict[str, "_models.AzureStorageInfoValue"]] = None,
        public_network_access: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteConfigPropertiesDictionary(_Model):
    """Site config properties dictionary.

    :ivar use32_bit_worker_process: <code>true</code> if use32BitWorkerProcess should be set to
     true for the stack; otherwise, <code>false</code>.
    :vartype use32_bit_worker_process: bool
    :ivar linux_fx_version: LinuxFxVersion configuration setting.
    :vartype linux_fx_version: str
    :ivar java_version: JavaVersion configuration setting.
    :vartype java_version: str
    :ivar power_shell_version: PowerShellVersion configuration setting.
    :vartype power_shell_version: str
    """

    use32_bit_worker_process: Optional[bool] = rest_field(name="use32BitWorkerProcess", visibility=["read"])
    """<code>true</code> if use32BitWorkerProcess should be set to true for the stack; otherwise,
     <code>false</code>."""
    linux_fx_version: Optional[str] = rest_field(name="linuxFxVersion", visibility=["read"])
    """LinuxFxVersion configuration setting."""
    java_version: Optional[str] = rest_field(name="javaVersion", visibility=["read"])
    """JavaVersion configuration setting."""
    power_shell_version: Optional[str] = rest_field(name="powerShellVersion", visibility=["read"])
    """PowerShellVersion configuration setting."""


class SiteConfigResource(ProxyResource):
    """Web app configuration ARM resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: Core resource properties.
    :vartype properties: ~azure.mgmt.web.models.SiteConfig
    :ivar kind: Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind.
    :vartype kind: str
    """

    properties: Optional["_models.SiteConfig"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Core resource properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind."""

    __flattened_items = [
        "number_of_workers",
        "default_documents",
        "net_framework_version",
        "php_version",
        "python_version",
        "node_version",
        "power_shell_version",
        "linux_fx_version",
        "windows_fx_version",
        "request_tracing_enabled",
        "request_tracing_expiration_time",
        "remote_debugging_enabled",
        "remote_debugging_version",
        "http_logging_enabled",
        "acr_use_managed_identity_creds",
        "acr_user_managed_identity_id",
        "logs_directory_size_limit",
        "detailed_error_logging_enabled",
        "publishing_username",
        "app_settings",
        "metadata",
        "connection_strings",
        "machine_key",
        "handler_mappings",
        "document_root",
        "scm_type",
        "use32_bit_worker_process",
        "web_sockets_enabled",
        "always_on",
        "java_version",
        "java_container",
        "java_container_version",
        "app_command_line",
        "managed_pipeline_mode",
        "virtual_applications",
        "load_balancing",
        "experiments",
        "limits",
        "auto_heal_enabled",
        "auto_heal_rules",
        "tracing_options",
        "vnet_name",
        "vnet_route_all_enabled",
        "vnet_private_ports_count",
        "cors",
        "push",
        "api_definition",
        "api_management_config",
        "auto_swap_slot_name",
        "local_my_sql_enabled",
        "managed_service_identity_id",
        "x_managed_service_identity_id",
        "key_vault_reference_identity",
        "ip_security_restrictions",
        "ip_security_restrictions_default_action",
        "scm_ip_security_restrictions",
        "scm_ip_security_restrictions_default_action",
        "scm_ip_security_restrictions_use_main",
        "http20_enabled",
        "http20_proxy_flag",
        "min_tls_version",
        "min_tls_cipher_suite",
        "scm_min_tls_version",
        "ftps_state",
        "pre_warmed_instance_count",
        "function_app_scale_limit",
        "elastic_web_app_scale_limit",
        "health_check_path",
        "functions_runtime_scale_monitoring_enabled",
        "website_time_zone",
        "minimum_elastic_instance_count",
        "azure_storage_accounts",
        "public_network_access",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.SiteConfig"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SiteConfigurationSnapshotInfo(ProxyOnlyResource):
    """A snapshot of a web app configuration.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: SiteConfigurationSnapshotInfo resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SiteConfigurationSnapshotInfoProperties
    """

    properties: Optional["_models.SiteConfigurationSnapshotInfoProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SiteConfigurationSnapshotInfo resource specific properties."""

    __flattened_items = ["time", "snapshot_id"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.SiteConfigurationSnapshotInfoProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SiteConfigurationSnapshotInfoProperties(_Model):
    """SiteConfigurationSnapshotInfo resource specific properties.

    :ivar time: The time the snapshot was taken.
    :vartype time: ~datetime.datetime
    :ivar snapshot_id: The id of the snapshot.
    :vartype snapshot_id: int
    """

    time: Optional[datetime.datetime] = rest_field(visibility=["read"], format="rfc3339")
    """The time the snapshot was taken."""
    snapshot_id: Optional[int] = rest_field(name="snapshotId", visibility=["read"])
    """The id of the snapshot."""


class SiteContainer(ProxyResource):
    """Container of a site.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: SiteContainer resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SiteContainerProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.SiteContainerProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SiteContainer resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "image",
        "target_port",
        "is_main",
        "start_up_command",
        "auth_type",
        "user_name",
        "password_secret",
        "user_managed_identity_client_id",
        "created_time",
        "last_modified_time",
        "volume_mounts",
        "inherit_app_settings_and_connection_strings",
        "environment_variables",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.SiteContainerProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SiteContainerProperties(_Model):
    """SiteContainer resource specific properties.

    :ivar image: Image Name. Required.
    :vartype image: str
    :ivar target_port: Target Port.
    :vartype target_port: str
    :ivar is_main: <code>true</code> if the container is the main site container;
     <code>false</code> otherwise. Required.
    :vartype is_main: bool
    :ivar start_up_command: StartUp Command.
    :vartype start_up_command: str
    :ivar auth_type: Auth Type. Known values are: "Anonymous", "UserCredentials", "SystemIdentity",
     and "UserAssigned".
    :vartype auth_type: str or ~azure.mgmt.web.models.AuthType
    :ivar user_name: User Name.
    :vartype user_name: str
    :ivar password_secret: Password Secret.
    :vartype password_secret: str
    :ivar user_managed_identity_client_id: UserManagedIdentity ClientId.
    :vartype user_managed_identity_client_id: str
    :ivar created_time: Created Time.
    :vartype created_time: ~datetime.datetime
    :ivar last_modified_time: Last Modified Time.
    :vartype last_modified_time: ~datetime.datetime
    :ivar volume_mounts: List of volume mounts.
    :vartype volume_mounts: list[~azure.mgmt.web.models.VolumeMount]
    :ivar inherit_app_settings_and_connection_strings: <code>true</code> if all AppSettings and
     ConnectionStrings have to be passed to the container as environment variables;
     <code>false</code> otherwise.
    :vartype inherit_app_settings_and_connection_strings: bool
    :ivar environment_variables: List of environment variables.
    :vartype environment_variables: list[~azure.mgmt.web.models.EnvironmentVariable]
    """

    image: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Image Name. Required."""
    target_port: Optional[str] = rest_field(
        name="targetPort", visibility=["read", "create", "update", "delete", "query"]
    )
    """Target Port."""
    is_main: bool = rest_field(name="isMain", visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> if the container is the main site container; <code>false</code> otherwise.
     Required."""
    start_up_command: Optional[str] = rest_field(
        name="startUpCommand", visibility=["read", "create", "update", "delete", "query"]
    )
    """StartUp Command."""
    auth_type: Optional[Union[str, "_models.AuthType"]] = rest_field(
        name="authType", visibility=["read", "create", "update", "delete", "query"]
    )
    """Auth Type. Known values are: \"Anonymous\", \"UserCredentials\", \"SystemIdentity\", and
     \"UserAssigned\"."""
    user_name: Optional[str] = rest_field(name="userName", visibility=["read", "create", "update", "delete", "query"])
    """User Name."""
    password_secret: Optional[str] = rest_field(
        name="passwordSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """Password Secret."""
    user_managed_identity_client_id: Optional[str] = rest_field(
        name="userManagedIdentityClientId", visibility=["read", "create", "update", "delete", "query"]
    )
    """UserManagedIdentity ClientId."""
    created_time: Optional[datetime.datetime] = rest_field(name="createdTime", visibility=["read"], format="rfc3339")
    """Created Time."""
    last_modified_time: Optional[datetime.datetime] = rest_field(
        name="lastModifiedTime", visibility=["read"], format="rfc3339"
    )
    """Last Modified Time."""
    volume_mounts: Optional[list["_models.VolumeMount"]] = rest_field(
        name="volumeMounts", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of volume mounts."""
    inherit_app_settings_and_connection_strings: Optional[bool] = rest_field(
        name="inheritAppSettingsAndConnectionStrings", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if all AppSettings and ConnectionStrings have to be passed to the container
     as environment variables; <code>false</code> otherwise."""
    environment_variables: Optional[list["_models.EnvironmentVariable"]] = rest_field(
        name="environmentVariables", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of environment variables."""

    @overload
    def __init__(
        self,
        *,
        image: str,
        is_main: bool,
        target_port: Optional[str] = None,
        start_up_command: Optional[str] = None,
        auth_type: Optional[Union[str, "_models.AuthType"]] = None,
        user_name: Optional[str] = None,
        password_secret: Optional[str] = None,
        user_managed_identity_client_id: Optional[str] = None,
        volume_mounts: Optional[list["_models.VolumeMount"]] = None,
        inherit_app_settings_and_connection_strings: Optional[bool] = None,
        environment_variables: Optional[list["_models.EnvironmentVariable"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteDnsConfig(_Model):
    """SiteDnsConfig.

    :ivar dns_servers: List of custom DNS servers to be used by an app for lookups. Maximum 5 dns
     servers can be set.
    :vartype dns_servers: list[str]
    :ivar dns_alt_server: Alternate DNS server to be used by apps. This property replicates the
     WEBSITE_DNS_ALT_SERVER app setting.
    :vartype dns_alt_server: str
    :ivar dns_retry_attempt_timeout: Timeout for a single dns lookup in seconds. Allowed range:
     1-30. Default is 3.
    :vartype dns_retry_attempt_timeout: int
    :ivar dns_retry_attempt_count: Total number of retries for dns lookup. Allowed range: 1-5.
     Default is 3.
    :vartype dns_retry_attempt_count: int
    :ivar dns_max_cache_timeout: Custom time for DNS to be cached in seconds. Allowed range: 0-60.
     Default is 30 seconds. 0 means caching disabled.
    :vartype dns_max_cache_timeout: int
    :ivar dns_legacy_sort_order: Indicates that sites using Virtual network custom DNS servers are
     still sorting the list of DNS servers. Read-Only.
    :vartype dns_legacy_sort_order: bool
    """

    dns_servers: Optional[list[str]] = rest_field(
        name="dnsServers", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of custom DNS servers to be used by an app for lookups. Maximum 5 dns servers can be set."""
    dns_alt_server: Optional[str] = rest_field(
        name="dnsAltServer", visibility=["read", "create", "update", "delete", "query"]
    )
    """Alternate DNS server to be used by apps. This property replicates the WEBSITE_DNS_ALT_SERVER
     app setting."""
    dns_retry_attempt_timeout: Optional[int] = rest_field(
        name="dnsRetryAttemptTimeout", visibility=["read", "create", "update", "delete", "query"]
    )
    """Timeout for a single dns lookup in seconds. Allowed range: 1-30. Default is 3."""
    dns_retry_attempt_count: Optional[int] = rest_field(
        name="dnsRetryAttemptCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """Total number of retries for dns lookup. Allowed range: 1-5. Default is 3."""
    dns_max_cache_timeout: Optional[int] = rest_field(
        name="dnsMaxCacheTimeout", visibility=["read", "create", "update", "delete", "query"]
    )
    """Custom time for DNS to be cached in seconds. Allowed range: 0-60. Default is 30 seconds. 0
     means caching disabled."""
    dns_legacy_sort_order: Optional[bool] = rest_field(name="dnsLegacySortOrder", visibility=["read"])
    """Indicates that sites using Virtual network custom DNS servers are still sorting the list of DNS
     servers. Read-Only."""

    @overload
    def __init__(
        self,
        *,
        dns_servers: Optional[list[str]] = None,
        dns_alt_server: Optional[str] = None,
        dns_retry_attempt_timeout: Optional[int] = None,
        dns_retry_attempt_count: Optional[int] = None,
        dns_max_cache_timeout: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteExtensionInfo(ProxyResource):
    """Site Extension Information.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: SiteExtensionInfo resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SiteExtensionInfoProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.SiteExtensionInfoProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SiteExtensionInfo resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "extension_id",
        "title",
        "extension_type",
        "summary",
        "description",
        "version",
        "extension_url",
        "project_url",
        "icon_url",
        "license_url",
        "feed_url",
        "authors",
        "installer_command_line_params",
        "published_date_time",
        "download_count",
        "local_is_latest_version",
        "local_path",
        "installed_date_time",
        "provisioning_state",
        "comment",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.SiteExtensionInfoProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SiteExtensionInfoProperties(_Model):
    """SiteExtensionInfo resource specific properties.

    :ivar extension_id: Site extension ID.
    :vartype extension_id: str
    :ivar title:
    :vartype title: str
    :ivar extension_type: Site extension type. Known values are: "Gallery" and "WebRoot".
    :vartype extension_type: str or ~azure.mgmt.web.models.SiteExtensionType
    :ivar summary: Summary description.
    :vartype summary: str
    :ivar description: Detailed description.
    :vartype description: str
    :ivar version: Version information.
    :vartype version: str
    :ivar extension_url: Extension URL.
    :vartype extension_url: str
    :ivar project_url: Project URL.
    :vartype project_url: str
    :ivar icon_url: Icon URL.
    :vartype icon_url: str
    :ivar license_url: License URL.
    :vartype license_url: str
    :ivar feed_url: Feed URL.
    :vartype feed_url: str
    :ivar authors: List of authors.
    :vartype authors: list[str]
    :ivar installer_command_line_params: Installer command line parameters.
    :vartype installer_command_line_params: str
    :ivar published_date_time: Published timestamp.
    :vartype published_date_time: ~datetime.datetime
    :ivar download_count: Count of downloads.
    :vartype download_count: int
    :ivar local_is_latest_version: <code>true</code> if the local version is the latest version;
     <code>false</code> otherwise.
    :vartype local_is_latest_version: bool
    :ivar local_path: Local path.
    :vartype local_path: str
    :ivar installed_date_time: Installed timestamp.
    :vartype installed_date_time: ~datetime.datetime
    :ivar provisioning_state: Provisioning state.
    :vartype provisioning_state: str
    :ivar comment: Site Extension comment.
    :vartype comment: str
    """

    extension_id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Site extension ID."""
    title: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    extension_type: Optional[Union[str, "_models.SiteExtensionType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Site extension type. Known values are: \"Gallery\" and \"WebRoot\"."""
    summary: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Summary description."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Detailed description."""
    version: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Version information."""
    extension_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Extension URL."""
    project_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Project URL."""
    icon_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Icon URL."""
    license_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """License URL."""
    feed_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Feed URL."""
    authors: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """List of authors."""
    installer_command_line_params: Optional[str] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Installer command line parameters."""
    published_date_time: Optional[datetime.datetime] = rest_field(
        visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Published timestamp."""
    download_count: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Count of downloads."""
    local_is_latest_version: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> if the local version is the latest version; <code>false</code> otherwise."""
    local_path: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Local path."""
    installed_date_time: Optional[datetime.datetime] = rest_field(
        visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Installed timestamp."""
    provisioning_state: Optional[str] = rest_field(
        name="provisioningState", visibility=["read", "create", "update", "delete", "query"]
    )
    """Provisioning state."""
    comment: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Site Extension comment."""

    @overload
    def __init__(
        self,
        *,
        extension_id: Optional[str] = None,
        title: Optional[str] = None,
        extension_type: Optional[Union[str, "_models.SiteExtensionType"]] = None,
        summary: Optional[str] = None,
        description: Optional[str] = None,
        version: Optional[str] = None,
        extension_url: Optional[str] = None,
        project_url: Optional[str] = None,
        icon_url: Optional[str] = None,
        license_url: Optional[str] = None,
        feed_url: Optional[str] = None,
        authors: Optional[list[str]] = None,
        installer_command_line_params: Optional[str] = None,
        published_date_time: Optional[datetime.datetime] = None,
        download_count: Optional[int] = None,
        local_is_latest_version: Optional[bool] = None,
        local_path: Optional[str] = None,
        installed_date_time: Optional[datetime.datetime] = None,
        provisioning_state: Optional[str] = None,
        comment: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteLimits(_Model):
    """Metric limits set on an app.

    :ivar max_percentage_cpu: Maximum allowed CPU usage percentage.
    :vartype max_percentage_cpu: float
    :ivar max_memory_in_mb: Maximum allowed memory usage in MB.
    :vartype max_memory_in_mb: int
    :ivar max_disk_size_in_mb: Maximum allowed disk size usage in MB.
    :vartype max_disk_size_in_mb: int
    """

    max_percentage_cpu: Optional[float] = rest_field(
        name="maxPercentageCpu", visibility=["read", "create", "update", "delete", "query"]
    )
    """Maximum allowed CPU usage percentage."""
    max_memory_in_mb: Optional[int] = rest_field(
        name="maxMemoryInMb", visibility=["read", "create", "update", "delete", "query"]
    )
    """Maximum allowed memory usage in MB."""
    max_disk_size_in_mb: Optional[int] = rest_field(
        name="maxDiskSizeInMb", visibility=["read", "create", "update", "delete", "query"]
    )
    """Maximum allowed disk size usage in MB."""

    @overload
    def __init__(
        self,
        *,
        max_percentage_cpu: Optional[float] = None,
        max_memory_in_mb: Optional[int] = None,
        max_disk_size_in_mb: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteLogsConfig(ProxyResource):
    """Configuration of App Service site logs.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: SiteLogsConfig resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SiteLogsConfigProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.SiteLogsConfigProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SiteLogsConfig resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["application_logs", "http_logs", "failed_requests_tracing", "detailed_error_messages"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.SiteLogsConfigProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SiteLogsConfigProperties(_Model):
    """SiteLogsConfig resource specific properties.

    :ivar application_logs: Application logs configuration.
    :vartype application_logs: ~azure.mgmt.web.models.ApplicationLogsConfig
    :ivar http_logs: HTTP logs configuration.
    :vartype http_logs: ~azure.mgmt.web.models.HttpLogsConfig
    :ivar failed_requests_tracing: Failed requests tracing configuration.
    :vartype failed_requests_tracing: ~azure.mgmt.web.models.EnabledConfig
    :ivar detailed_error_messages: Detailed error messages configuration.
    :vartype detailed_error_messages: ~azure.mgmt.web.models.EnabledConfig
    """

    application_logs: Optional["_models.ApplicationLogsConfig"] = rest_field(
        name="applicationLogs", visibility=["read", "create", "update", "delete", "query"]
    )
    """Application logs configuration."""
    http_logs: Optional["_models.HttpLogsConfig"] = rest_field(
        name="httpLogs", visibility=["read", "create", "update", "delete", "query"]
    )
    """HTTP logs configuration."""
    failed_requests_tracing: Optional["_models.EnabledConfig"] = rest_field(
        name="failedRequestsTracing", visibility=["read", "create", "update", "delete", "query"]
    )
    """Failed requests tracing configuration."""
    detailed_error_messages: Optional["_models.EnabledConfig"] = rest_field(
        name="detailedErrorMessages", visibility=["read", "create", "update", "delete", "query"]
    )
    """Detailed error messages configuration."""

    @overload
    def __init__(
        self,
        *,
        application_logs: Optional["_models.ApplicationLogsConfig"] = None,
        http_logs: Optional["_models.HttpLogsConfig"] = None,
        failed_requests_tracing: Optional["_models.EnabledConfig"] = None,
        detailed_error_messages: Optional["_models.EnabledConfig"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteMachineKey(_Model):
    """MachineKey of an app.

    :ivar validation: MachineKey validation.
    :vartype validation: str
    :ivar validation_key: Validation key.
    :vartype validation_key: str
    :ivar decryption: Algorithm used for decryption.
    :vartype decryption: str
    :ivar decryption_key: Decryption key.
    :vartype decryption_key: str
    """

    validation: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """MachineKey validation."""
    validation_key: Optional[str] = rest_field(
        name="validationKey", visibility=["read", "create", "update", "delete", "query"]
    )
    """Validation key."""
    decryption: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Algorithm used for decryption."""
    decryption_key: Optional[str] = rest_field(
        name="decryptionKey", visibility=["read", "create", "update", "delete", "query"]
    )
    """Decryption key."""

    @overload
    def __init__(
        self,
        *,
        validation: Optional[str] = None,
        validation_key: Optional[str] = None,
        decryption: Optional[str] = None,
        decryption_key: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SitePatchResource(ProxyOnlyResource):
    """ARM resource for a site.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: SitePatchResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SitePatchResourceProperties
    :ivar identity: Managed service identity.
    :vartype identity: ~azure.mgmt.web.models.ManagedServiceIdentity
    """

    properties: Optional["_models.SitePatchResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SitePatchResource resource specific properties."""
    identity: Optional["_models.ManagedServiceIdentity"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Managed service identity."""

    __flattened_items = [
        "state",
        "host_names",
        "repository_site_name",
        "usage_state",
        "enabled",
        "enabled_host_names",
        "availability_state",
        "host_name_ssl_states",
        "server_farm_id",
        "reserved",
        "is_xenon",
        "hyper_v",
        "last_modified_time_utc",
        "dns_configuration",
        "site_config",
        "traffic_manager_host_names",
        "scm_site_also_stopped",
        "target_swap_slot",
        "hosting_environment_profile",
        "client_affinity_enabled",
        "client_affinity_proxy_enabled",
        "client_cert_enabled",
        "client_cert_mode",
        "client_cert_exclusion_paths",
        "host_names_disabled",
        "custom_domain_verification_id",
        "outbound_ip_addresses",
        "possible_outbound_ip_addresses",
        "container_size",
        "daily_memory_time_quota",
        "suspended_till",
        "max_number_of_workers",
        "cloning_info",
        "resource_group",
        "is_default_container",
        "default_host_name",
        "slot_swap_status",
        "https_only",
        "redundancy_mode",
        "in_progress_operation_id",
        "public_network_access",
        "storage_account_required",
        "key_vault_reference_identity",
        "virtual_network_subnet_id",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.SitePatchResourceProperties"] = None,
        identity: Optional["_models.ManagedServiceIdentity"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SitePatchResourceProperties(_Model):
    """SitePatchResource resource specific properties.

    :ivar state: Current state of the app.
    :vartype state: str
    :ivar host_names: Hostnames associated with the app.
    :vartype host_names: list[str]
    :ivar repository_site_name: Name of the repository site.
    :vartype repository_site_name: str
    :ivar usage_state: State indicating whether the app has exceeded its quota usage. Read-only.
     Known values are: "Normal" and "Exceeded".
    :vartype usage_state: str or ~azure.mgmt.web.models.UsageState
    :ivar enabled: <code>true</code> if the app is enabled; otherwise, <code>false</code>. Setting
     this value to false disables the app (takes the app offline).
    :vartype enabled: bool
    :ivar enabled_host_names: Enabled hostnames for the app.Hostnames need to be assigned (see
     HostNames) AND enabled. Otherwise, the app is not served on those hostnames.
    :vartype enabled_host_names: list[str]
    :ivar availability_state: Management information availability state for the app. Known values
     are: "Normal", "Limited", and "DisasterRecoveryMode".
    :vartype availability_state: str or ~azure.mgmt.web.models.SiteAvailabilityState
    :ivar host_name_ssl_states: Hostname SSL states are used to manage the SSL bindings for app's
     hostnames.
    :vartype host_name_ssl_states: list[~azure.mgmt.web.models.HostNameSslState]
    :ivar server_farm_id: Resource ID of the associated App Service plan, formatted as:
     "/subscriptions/{subscriptionID}/resourceGroups/{groupName}/providers/Microsoft.Web/serverfarms/{appServicePlanName}".
    :vartype server_farm_id: str
    :ivar reserved: <code>true</code> if reserved; otherwise, <code>false</code>.
    :vartype reserved: bool
    :ivar is_xenon: Obsolete: Hyper-V sandbox.
    :vartype is_xenon: bool
    :ivar hyper_v: Hyper-V sandbox.
    :vartype hyper_v: bool
    :ivar last_modified_time_utc: Last time the app was modified, in UTC. Read-only.
    :vartype last_modified_time_utc: ~datetime.datetime
    :ivar dns_configuration: Property to configure various DNS related settings for a site.
    :vartype dns_configuration: ~azure.mgmt.web.models.SiteDnsConfig
    :ivar site_config: Configuration of the app.
    :vartype site_config: ~azure.mgmt.web.models.SiteConfig
    :ivar traffic_manager_host_names: Azure Traffic Manager hostnames associated with the app.
     Read-only.
    :vartype traffic_manager_host_names: list[str]
    :ivar scm_site_also_stopped: <code>true</code> to stop SCM (KUDU) site when the app is stopped;
     otherwise, <code>false</code>. The default is <code>false</code>.
    :vartype scm_site_also_stopped: bool
    :ivar target_swap_slot: Specifies which deployment slot this app will swap into. Read-only.
    :vartype target_swap_slot: str
    :ivar hosting_environment_profile: App Service Environment to use for the app.
    :vartype hosting_environment_profile: ~azure.mgmt.web.models.HostingEnvironmentProfile
    :ivar client_affinity_enabled: <code>true</code> to enable client affinity; <code>false</code>
     to stop sending session affinity cookies, which route client requests in the same session to
     the same instance. Default is <code>true</code>.
    :vartype client_affinity_enabled: bool
    :ivar client_affinity_proxy_enabled: <code>true</code> to override client affinity cookie
     domain with X-Forwarded-Host request header. <code>false</code> to use default domain. Default
     is <code>false</code>.
    :vartype client_affinity_proxy_enabled: bool
    :ivar client_cert_enabled: <code>true</code> to enable client certificate authentication (TLS
     mutual authentication); otherwise, <code>false</code>. Default is <code>false</code>.
    :vartype client_cert_enabled: bool
    :ivar client_cert_mode: This composes with ClientCertEnabled setting.

     * ClientCertEnabled: false means ClientCert is ignored.
     * ClientCertEnabled: true and ClientCertMode: Required means ClientCert is required.
     * ClientCertEnabled: true and ClientCertMode: Optional means ClientCert is optional or
       accepted. Known values are: "Required", "Optional", and "OptionalInteractiveUser".
    :vartype client_cert_mode: str or ~azure.mgmt.web.models.ClientCertMode
    :ivar client_cert_exclusion_paths: client certificate authentication comma-separated exclusion
     paths.
    :vartype client_cert_exclusion_paths: str
    :ivar host_names_disabled: <code>true</code> to disable the public hostnames of the app;
     otherwise, <code>false</code>.\\n If <code>true</code>, the app is only accessible via API
     management process.
    :vartype host_names_disabled: bool
    :ivar custom_domain_verification_id: Unique identifier that verifies the custom domains
     assigned to the app. Customer will add this id to a txt record for verification.
    :vartype custom_domain_verification_id: str
    :ivar outbound_ip_addresses: List of IP addresses that the app uses for outbound connections
     (e.g. database access). Includes VIPs from tenants that site can be hosted with current
     settings. Read-only.
    :vartype outbound_ip_addresses: str
    :ivar possible_outbound_ip_addresses: List of IP addresses that the app uses for outbound
     connections (e.g. database access). Includes VIPs from all tenants except dataComponent.
     Read-only.
    :vartype possible_outbound_ip_addresses: str
    :ivar container_size: Size of the function container.
    :vartype container_size: int
    :ivar daily_memory_time_quota: Maximum allowed daily memory-time quota (applicable on dynamic
     apps only).
    :vartype daily_memory_time_quota: int
    :ivar suspended_till: App suspended till in case memory-time quota is exceeded.
    :vartype suspended_till: ~datetime.datetime
    :ivar max_number_of_workers: Maximum number of workers. This only applies to Functions
     container.
    :vartype max_number_of_workers: int
    :ivar cloning_info: If specified during app creation, the app is cloned from a source app.
    :vartype cloning_info: ~azure.mgmt.web.models.CloningInfo
    :ivar resource_group: Name of the resource group the app belongs to. Read-only.
    :vartype resource_group: str
    :ivar is_default_container: <code>true</code> if the app is a default container; otherwise,
     <code>false</code>.
    :vartype is_default_container: bool
    :ivar default_host_name: Default hostname of the app. Read-only.
    :vartype default_host_name: str
    :ivar slot_swap_status: Status of the last deployment slot swap operation.
    :vartype slot_swap_status: ~azure.mgmt.web.models.SlotSwapStatus
    :ivar https_only: HttpsOnly: configures a web site to accept only https requests. Issues
     redirect for http requests.
    :vartype https_only: bool
    :ivar redundancy_mode: Site redundancy mode. Known values are: "None", "Manual", "Failover",
     "ActiveActive", and "GeoRedundant".
    :vartype redundancy_mode: str or ~azure.mgmt.web.models.RedundancyMode
    :ivar in_progress_operation_id: Specifies an operation id if this site has a pending operation.
    :vartype in_progress_operation_id: str
    :ivar public_network_access: Property to allow or block all public traffic. Allowed Values:
     'Enabled', 'Disabled' or an empty string.
    :vartype public_network_access: str
    :ivar storage_account_required: Checks if Customer provided storage account is required.
    :vartype storage_account_required: bool
    :ivar key_vault_reference_identity: Identity to use for Key Vault Reference authentication.
    :vartype key_vault_reference_identity: str
    :ivar virtual_network_subnet_id: Azure Resource Manager ID of the Virtual network and subnet to
     be joined by Regional VNET Integration. This must be of the form
     /subscriptions/{subscriptionName}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}.
    :vartype virtual_network_subnet_id: str
    """

    state: Optional[str] = rest_field(visibility=["read"])
    """Current state of the app."""
    host_names: Optional[list[str]] = rest_field(name="hostNames", visibility=["read"])
    """Hostnames associated with the app."""
    repository_site_name: Optional[str] = rest_field(name="repositorySiteName", visibility=["read"])
    """Name of the repository site."""
    usage_state: Optional[Union[str, "_models.UsageState"]] = rest_field(name="usageState", visibility=["read"])
    """State indicating whether the app has exceeded its quota usage. Read-only. Known values are:
     \"Normal\" and \"Exceeded\"."""
    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> if the app is enabled; otherwise, <code>false</code>. Setting this value to
     false disables the app (takes the app offline)."""
    enabled_host_names: Optional[list[str]] = rest_field(name="enabledHostNames", visibility=["read"])
    """Enabled hostnames for the app.Hostnames need to be assigned (see HostNames) AND enabled.
     Otherwise, the app is not served on those hostnames."""
    availability_state: Optional[Union[str, "_models.SiteAvailabilityState"]] = rest_field(
        name="availabilityState", visibility=["read"]
    )
    """Management information availability state for the app. Known values are: \"Normal\",
     \"Limited\", and \"DisasterRecoveryMode\"."""
    host_name_ssl_states: Optional[list["_models.HostNameSslState"]] = rest_field(
        name="hostNameSslStates", visibility=["read", "create", "update", "delete", "query"]
    )
    """Hostname SSL states are used to manage the SSL bindings for app's hostnames."""
    server_farm_id: Optional[str] = rest_field(
        name="serverFarmId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource ID of the associated App Service plan, formatted as:
     \"/subscriptions/{subscriptionID}/resourceGroups/{groupName}/providers/Microsoft.Web/serverfarms/{appServicePlanName}\"."""
    reserved: Optional[bool] = rest_field(visibility=["read", "create"])
    """<code>true</code> if reserved; otherwise, <code>false</code>."""
    is_xenon: Optional[bool] = rest_field(name="isXenon", visibility=["read", "create"])
    """Obsolete: Hyper-V sandbox."""
    hyper_v: Optional[bool] = rest_field(name="hyperV", visibility=["read", "create"])
    """Hyper-V sandbox."""
    last_modified_time_utc: Optional[datetime.datetime] = rest_field(
        name="lastModifiedTimeUtc", visibility=["read"], format="rfc3339"
    )
    """Last time the app was modified, in UTC. Read-only."""
    dns_configuration: Optional["_models.SiteDnsConfig"] = rest_field(
        name="dnsConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """Property to configure various DNS related settings for a site."""
    site_config: Optional["_models.SiteConfig"] = rest_field(
        name="siteConfig", visibility=["read", "create", "update", "delete", "query"]
    )
    """Configuration of the app."""
    traffic_manager_host_names: Optional[list[str]] = rest_field(name="trafficManagerHostNames", visibility=["read"])
    """Azure Traffic Manager hostnames associated with the app. Read-only."""
    scm_site_also_stopped: Optional[bool] = rest_field(
        name="scmSiteAlsoStopped", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to stop SCM (KUDU) site when the app is stopped; otherwise,
     <code>false</code>. The default is <code>false</code>."""
    target_swap_slot: Optional[str] = rest_field(name="targetSwapSlot", visibility=["read"])
    """Specifies which deployment slot this app will swap into. Read-only."""
    hosting_environment_profile: Optional["_models.HostingEnvironmentProfile"] = rest_field(
        name="hostingEnvironmentProfile", visibility=["read", "create"]
    )
    """App Service Environment to use for the app."""
    client_affinity_enabled: Optional[bool] = rest_field(
        name="clientAffinityEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to enable client affinity; <code>false</code> to stop sending session
     affinity cookies, which route client requests in the same session to the same instance. Default
     is <code>true</code>."""
    client_affinity_proxy_enabled: Optional[bool] = rest_field(
        name="clientAffinityProxyEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to override client affinity cookie domain with X-Forwarded-Host request
     header. <code>false</code> to use default domain. Default is <code>false</code>."""
    client_cert_enabled: Optional[bool] = rest_field(
        name="clientCertEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to enable client certificate authentication (TLS mutual authentication);
     otherwise, <code>false</code>. Default is <code>false</code>."""
    client_cert_mode: Optional[Union[str, "_models.ClientCertMode"]] = rest_field(
        name="clientCertMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """This composes with ClientCertEnabled setting.
 
      * ClientCertEnabled: false means ClientCert is ignored.
      * ClientCertEnabled: true and ClientCertMode: Required means ClientCert is required.
      * ClientCertEnabled: true and ClientCertMode: Optional means ClientCert is optional or
        accepted. Known values are: \"Required\", \"Optional\", and \"OptionalInteractiveUser\"."""
    client_cert_exclusion_paths: Optional[str] = rest_field(
        name="clientCertExclusionPaths", visibility=["read", "create", "update", "delete", "query"]
    )
    """client certificate authentication comma-separated exclusion paths."""
    host_names_disabled: Optional[bool] = rest_field(
        name="hostNamesDisabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to disable the public hostnames of the app; otherwise, <code>false</code>.\n
     If <code>true</code>, the app is only accessible via API management process."""
    custom_domain_verification_id: Optional[str] = rest_field(
        name="customDomainVerificationId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Unique identifier that verifies the custom domains assigned to the app. Customer will add this
     id to a txt record for verification."""
    outbound_ip_addresses: Optional[str] = rest_field(name="outboundIpAddresses", visibility=["read"])
    """List of IP addresses that the app uses for outbound connections (e.g. database access).
     Includes VIPs from tenants that site can be hosted with current settings. Read-only."""
    possible_outbound_ip_addresses: Optional[str] = rest_field(name="possibleOutboundIpAddresses", visibility=["read"])
    """List of IP addresses that the app uses for outbound connections (e.g. database access).
     Includes VIPs from all tenants except dataComponent. Read-only."""
    container_size: Optional[int] = rest_field(
        name="containerSize", visibility=["read", "create", "update", "delete", "query"]
    )
    """Size of the function container."""
    daily_memory_time_quota: Optional[int] = rest_field(
        name="dailyMemoryTimeQuota", visibility=["read", "create", "update", "delete", "query"]
    )
    """Maximum allowed daily memory-time quota (applicable on dynamic apps only)."""
    suspended_till: Optional[datetime.datetime] = rest_field(
        name="suspendedTill", visibility=["read"], format="rfc3339"
    )
    """App suspended till in case memory-time quota is exceeded."""
    max_number_of_workers: Optional[int] = rest_field(name="maxNumberOfWorkers", visibility=["read"])
    """Maximum number of workers. This only applies to Functions container."""
    cloning_info: Optional["_models.CloningInfo"] = rest_field(name="cloningInfo", visibility=["create"])
    """If specified during app creation, the app is cloned from a source app."""
    resource_group: Optional[str] = rest_field(name="resourceGroup", visibility=["read"])
    """Name of the resource group the app belongs to. Read-only."""
    is_default_container: Optional[bool] = rest_field(name="isDefaultContainer", visibility=["read"])
    """<code>true</code> if the app is a default container; otherwise, <code>false</code>."""
    default_host_name: Optional[str] = rest_field(name="defaultHostName", visibility=["read"])
    """Default hostname of the app. Read-only."""
    slot_swap_status: Optional["_models.SlotSwapStatus"] = rest_field(name="slotSwapStatus", visibility=["read"])
    """Status of the last deployment slot swap operation."""
    https_only: Optional[bool] = rest_field(
        name="httpsOnly", visibility=["read", "create", "update", "delete", "query"]
    )
    """HttpsOnly: configures a web site to accept only https requests. Issues redirect for http
     requests."""
    redundancy_mode: Optional[Union[str, "_models.RedundancyMode"]] = rest_field(
        name="redundancyMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """Site redundancy mode. Known values are: \"None\", \"Manual\", \"Failover\", \"ActiveActive\",
     and \"GeoRedundant\"."""
    in_progress_operation_id: Optional[str] = rest_field(name="inProgressOperationId", visibility=["read"])
    """Specifies an operation id if this site has a pending operation."""
    public_network_access: Optional[str] = rest_field(
        name="publicNetworkAccess", visibility=["read", "create", "update", "delete", "query"]
    )
    """Property to allow or block all public traffic. Allowed Values: 'Enabled', 'Disabled' or an
     empty string."""
    storage_account_required: Optional[bool] = rest_field(
        name="storageAccountRequired", visibility=["read", "create", "update", "delete", "query"]
    )
    """Checks if Customer provided storage account is required."""
    key_vault_reference_identity: Optional[str] = rest_field(
        name="keyVaultReferenceIdentity", visibility=["read", "create", "update", "delete", "query"]
    )
    """Identity to use for Key Vault Reference authentication."""
    virtual_network_subnet_id: Optional[str] = rest_field(
        name="virtualNetworkSubnetId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Azure Resource Manager ID of the Virtual network and subnet to be joined by Regional VNET
     Integration. This must be of the form
     /subscriptions/{subscriptionName}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}."""

    @overload
    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        enabled: Optional[bool] = None,
        host_name_ssl_states: Optional[list["_models.HostNameSslState"]] = None,
        server_farm_id: Optional[str] = None,
        reserved: Optional[bool] = None,
        is_xenon: Optional[bool] = None,
        hyper_v: Optional[bool] = None,
        dns_configuration: Optional["_models.SiteDnsConfig"] = None,
        site_config: Optional["_models.SiteConfig"] = None,
        scm_site_also_stopped: Optional[bool] = None,
        hosting_environment_profile: Optional["_models.HostingEnvironmentProfile"] = None,
        client_affinity_enabled: Optional[bool] = None,
        client_affinity_proxy_enabled: Optional[bool] = None,
        client_cert_enabled: Optional[bool] = None,
        client_cert_mode: Optional[Union[str, "_models.ClientCertMode"]] = None,
        client_cert_exclusion_paths: Optional[str] = None,
        host_names_disabled: Optional[bool] = None,
        custom_domain_verification_id: Optional[str] = None,
        container_size: Optional[int] = None,
        daily_memory_time_quota: Optional[int] = None,
        cloning_info: Optional["_models.CloningInfo"] = None,
        https_only: Optional[bool] = None,
        redundancy_mode: Optional[Union[str, "_models.RedundancyMode"]] = None,
        public_network_access: Optional[str] = None,
        storage_account_required: Optional[bool] = None,
        key_vault_reference_identity: Optional[str] = None,
        virtual_network_subnet_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SitePhpErrorLogFlag(ProxyOnlyResource):
    """Used for getting PHP error logging flag.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: SitePhpErrorLogFlag resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SitePhpErrorLogFlagProperties
    """

    properties: Optional["_models.SitePhpErrorLogFlagProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SitePhpErrorLogFlag resource specific properties."""

    __flattened_items = [
        "local_log_errors",
        "master_log_errors",
        "local_log_errors_max_length",
        "master_log_errors_max_length",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.SitePhpErrorLogFlagProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SitePhpErrorLogFlagProperties(_Model):
    """SitePhpErrorLogFlag resource specific properties.

    :ivar local_log_errors: Local log_errors setting.
    :vartype local_log_errors: str
    :ivar master_log_errors: Master log_errors setting.
    :vartype master_log_errors: str
    :ivar local_log_errors_max_length: Local log_errors_max_len setting.
    :vartype local_log_errors_max_length: str
    :ivar master_log_errors_max_length: Master log_errors_max_len setting.
    :vartype master_log_errors_max_length: str
    """

    local_log_errors: Optional[str] = rest_field(
        name="localLogErrors", visibility=["read", "create", "update", "delete", "query"]
    )
    """Local log_errors setting."""
    master_log_errors: Optional[str] = rest_field(
        name="masterLogErrors", visibility=["read", "create", "update", "delete", "query"]
    )
    """Master log_errors setting."""
    local_log_errors_max_length: Optional[str] = rest_field(
        name="localLogErrorsMaxLength", visibility=["read", "create", "update", "delete", "query"]
    )
    """Local log_errors_max_len setting."""
    master_log_errors_max_length: Optional[str] = rest_field(
        name="masterLogErrorsMaxLength", visibility=["read", "create", "update", "delete", "query"]
    )
    """Master log_errors_max_len setting."""

    @overload
    def __init__(
        self,
        *,
        local_log_errors: Optional[str] = None,
        master_log_errors: Optional[str] = None,
        local_log_errors_max_length: Optional[str] = None,
        master_log_errors_max_length: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteProperties(_Model):
    """Site resource specific properties.

    :ivar state: Current state of the app.
    :vartype state: str
    :ivar host_names: Hostnames associated with the app.
    :vartype host_names: list[str]
    :ivar repository_site_name: Name of the repository site.
    :vartype repository_site_name: str
    :ivar usage_state: State indicating whether the app has exceeded its quota usage. Read-only.
     Known values are: "Normal" and "Exceeded".
    :vartype usage_state: str or ~azure.mgmt.web.models.UsageState
    :ivar enabled: <code>true</code> if the app is enabled; otherwise, <code>false</code>. Setting
     this value to false disables the app (takes the app offline).
    :vartype enabled: bool
    :ivar enabled_host_names: Enabled hostnames for the app.Hostnames need to be assigned (see
     HostNames) AND enabled. Otherwise, the app is not served on those hostnames.
    :vartype enabled_host_names: list[str]
    :ivar availability_state: Management information availability state for the app. Known values
     are: "Normal", "Limited", and "DisasterRecoveryMode".
    :vartype availability_state: str or ~azure.mgmt.web.models.SiteAvailabilityState
    :ivar host_name_ssl_states: Hostname SSL states are used to manage the SSL bindings for app's
     hostnames.
    :vartype host_name_ssl_states: list[~azure.mgmt.web.models.HostNameSslState]
    :ivar server_farm_id: Resource ID of the associated App Service plan, formatted as:
     "/subscriptions/{subscriptionID}/resourceGroups/{groupName}/providers/Microsoft.Web/serverfarms/{appServicePlanName}".
    :vartype server_farm_id: str
    :ivar reserved: <code>true</code> if reserved; otherwise, <code>false</code>.
    :vartype reserved: bool
    :ivar is_xenon: Obsolete: Hyper-V sandbox.
    :vartype is_xenon: bool
    :ivar hyper_v: Hyper-V sandbox.
    :vartype hyper_v: bool
    :ivar last_modified_time_utc: Last time the app was modified, in UTC. Read-only.
    :vartype last_modified_time_utc: ~datetime.datetime
    :ivar dns_configuration: Property to configure various DNS related settings for a site.
    :vartype dns_configuration: ~azure.mgmt.web.models.SiteDnsConfig
    :ivar outbound_vnet_routing: Property to configure various outbound traffic routing options
     over virtual network for a site.
    :vartype outbound_vnet_routing: ~azure.mgmt.web.models.OutboundVnetRouting
    :ivar site_config: Configuration of an App Service app. This property is not returned in
     response to normal create and read requests since it may contain sensitive information.
    :vartype site_config: ~azure.mgmt.web.models.SiteConfig
    :ivar function_app_config: Configuration specific of the Azure Function app.
    :vartype function_app_config: ~azure.mgmt.web.models.FunctionAppConfig
    :ivar dapr_config: Dapr configuration of the app.
    :vartype dapr_config: ~azure.mgmt.web.models.DaprConfig
    :ivar workload_profile_name: Workload profile name for function app to execute on.
    :vartype workload_profile_name: str
    :ivar resource_config: Function app resource requirements.
    :vartype resource_config: ~azure.mgmt.web.models.ResourceConfig
    :ivar traffic_manager_host_names: Azure Traffic Manager hostnames associated with the app.
     Read-only.
    :vartype traffic_manager_host_names: list[str]
    :ivar scm_site_also_stopped: <code>true</code> to stop SCM (KUDU) site when the app is stopped;
     otherwise, <code>false</code>. The default is <code>false</code>.
    :vartype scm_site_also_stopped: bool
    :ivar target_swap_slot: Specifies which deployment slot this app will swap into. Read-only.
    :vartype target_swap_slot: str
    :ivar hosting_environment_profile: App Service Environment to use for the app.
    :vartype hosting_environment_profile: ~azure.mgmt.web.models.HostingEnvironmentProfile
    :ivar client_affinity_enabled: <code>true</code> to enable client affinity; <code>false</code>
     to stop sending session affinity cookies, which route client requests in the same session to
     the same instance. Default is <code>true</code>.
    :vartype client_affinity_enabled: bool
    :ivar client_affinity_partitioning_enabled: <code>true</code> to enable client affinity
     partitioning using CHIPS cookies, this will add the <code>partitioned</code> property to the
     affinity cookies; <code>false</code> to stop sending partitioned affinity cookies. Default is
     <code>false</code>.
    :vartype client_affinity_partitioning_enabled: bool
    :ivar client_affinity_proxy_enabled: <code>true</code> to override client affinity cookie
     domain with X-Forwarded-Host request header. <code>false</code> to use default domain. Default
     is <code>false</code>.
    :vartype client_affinity_proxy_enabled: bool
    :ivar client_cert_enabled: <code>true</code> to enable client certificate authentication (TLS
     mutual authentication); otherwise, <code>false</code>. Default is <code>false</code>.
    :vartype client_cert_enabled: bool
    :ivar client_cert_mode: This composes with ClientCertEnabled setting.

     * ClientCertEnabled: false means ClientCert is ignored.
     * ClientCertEnabled: true and ClientCertMode: Required means ClientCert is required.
     * ClientCertEnabled: true and ClientCertMode: Optional means ClientCert is optional or
       accepted. Known values are: "Required", "Optional", and "OptionalInteractiveUser".
    :vartype client_cert_mode: str or ~azure.mgmt.web.models.ClientCertMode
    :ivar client_cert_exclusion_paths: client certificate authentication comma-separated exclusion
     paths.
    :vartype client_cert_exclusion_paths: str
    :ivar ip_mode: Specifies the IP mode of the app. Known values are: "IPv4", "IPv6", and
     "IPv4AndIPv6".
    :vartype ip_mode: str or ~azure.mgmt.web.models.IPMode
    :ivar end_to_end_encryption_enabled: Whether to use end to end encryption between the FrontEnd
     and the Worker.
    :vartype end_to_end_encryption_enabled: bool
    :ivar ssh_enabled: Whether to enable ssh access.
    :vartype ssh_enabled: bool
    :ivar host_names_disabled: <code>true</code> to disable the public hostnames of the app;
     otherwise, <code>false</code>. If <code>true</code>, the app is only accessible via API
     management process.
    :vartype host_names_disabled: bool
    :ivar custom_domain_verification_id: Unique identifier that verifies the custom domains
     assigned to the app. Customer will add this id to a txt record for verification.
    :vartype custom_domain_verification_id: str
    :ivar outbound_ip_addresses: List of IP addresses that the app uses for outbound connections
     (e.g. database access). Includes VIPs from tenants that site can be hosted with current
     settings. Read-only.
    :vartype outbound_ip_addresses: str
    :ivar possible_outbound_ip_addresses: List of IP addresses that the app uses for outbound
     connections (e.g. database access). Includes VIPs from all tenants except dataComponent.
     Read-only.
    :vartype possible_outbound_ip_addresses: str
    :ivar container_size: Size of the function container.
    :vartype container_size: int
    :ivar daily_memory_time_quota: Maximum allowed daily memory-time quota (applicable on dynamic
     apps only).
    :vartype daily_memory_time_quota: int
    :ivar suspended_till: App suspended till in case memory-time quota is exceeded.
    :vartype suspended_till: ~datetime.datetime
    :ivar max_number_of_workers: Maximum number of workers. This only applies to Functions
     container.
    :vartype max_number_of_workers: int
    :ivar cloning_info: If specified during app creation, the app is cloned from a source app.
    :vartype cloning_info: ~azure.mgmt.web.models.CloningInfo
    :ivar resource_group: Name of the resource group the app belongs to. Read-only.
    :vartype resource_group: str
    :ivar is_default_container: <code>true</code> if the app is a default container; otherwise,
     <code>false</code>.
    :vartype is_default_container: bool
    :ivar default_host_name: Default hostname of the app. Read-only.
    :vartype default_host_name: str
    :ivar slot_swap_status: Status of the last deployment slot swap operation.
    :vartype slot_swap_status: ~azure.mgmt.web.models.SlotSwapStatus
    :ivar https_only: HttpsOnly: configures a web site to accept only https requests. Issues
     redirect for http requests.
    :vartype https_only: bool
    :ivar redundancy_mode: Site redundancy mode. Known values are: "None", "Manual", "Failover",
     "ActiveActive", and "GeoRedundant".
    :vartype redundancy_mode: str or ~azure.mgmt.web.models.RedundancyMode
    :ivar in_progress_operation_id: Specifies an operation id if this site has a pending operation.
    :vartype in_progress_operation_id: str
    :ivar public_network_access: Property to allow or block all public traffic. Allowed Values:
     'Enabled', 'Disabled' or an empty string.
    :vartype public_network_access: str
    :ivar storage_account_required: Checks if Customer provided storage account is required.
    :vartype storage_account_required: bool
    :ivar key_vault_reference_identity: Identity to use for Key Vault Reference authentication.
    :vartype key_vault_reference_identity: str
    :ivar auto_generated_domain_name_label_scope: Specifies the scope of uniqueness for the default
     hostname during resource creation. Known values are: "TenantReuse", "SubscriptionReuse",
     "ResourceGroupReuse", and "NoReuse".
    :vartype auto_generated_domain_name_label_scope: str or
     ~azure.mgmt.web.models.AutoGeneratedDomainNameLabelScope
    :ivar virtual_network_subnet_id: Azure Resource Manager ID of the Virtual network and subnet to
     be joined by Regional VNET Integration. This must be of the form
     /subscriptions/{subscriptionName}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}.
    :vartype virtual_network_subnet_id: str
    :ivar managed_environment_id: Azure Resource Manager ID of the customer's selected Managed
     Environment on which to host this app. This must be of the form
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.App/managedEnvironments/{managedEnvironmentName}.
    :vartype managed_environment_id: str
    :ivar sku: Current SKU of application based on associated App Service Plan. Some valid SKU
     values are Free, Shared, Basic, Dynamic, FlexConsumption, Standard, Premium, PremiumV2,
     PremiumV3, Isolated, IsolatedV2.
    :vartype sku: str
    """

    state: Optional[str] = rest_field(visibility=["read"])
    """Current state of the app."""
    host_names: Optional[list[str]] = rest_field(name="hostNames", visibility=["read"])
    """Hostnames associated with the app."""
    repository_site_name: Optional[str] = rest_field(name="repositorySiteName", visibility=["read"])
    """Name of the repository site."""
    usage_state: Optional[Union[str, "_models.UsageState"]] = rest_field(name="usageState", visibility=["read"])
    """State indicating whether the app has exceeded its quota usage. Read-only. Known values are:
     \"Normal\" and \"Exceeded\"."""
    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> if the app is enabled; otherwise, <code>false</code>. Setting this value to
     false disables the app (takes the app offline)."""
    enabled_host_names: Optional[list[str]] = rest_field(name="enabledHostNames", visibility=["read"])
    """Enabled hostnames for the app.Hostnames need to be assigned (see HostNames) AND enabled.
     Otherwise, the app is not served on those hostnames."""
    availability_state: Optional[Union[str, "_models.SiteAvailabilityState"]] = rest_field(
        name="availabilityState", visibility=["read"]
    )
    """Management information availability state for the app. Known values are: \"Normal\",
     \"Limited\", and \"DisasterRecoveryMode\"."""
    host_name_ssl_states: Optional[list["_models.HostNameSslState"]] = rest_field(
        name="hostNameSslStates", visibility=["read", "create", "update", "delete", "query"]
    )
    """Hostname SSL states are used to manage the SSL bindings for app's hostnames."""
    server_farm_id: Optional[str] = rest_field(
        name="serverFarmId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource ID of the associated App Service plan, formatted as:
     \"/subscriptions/{subscriptionID}/resourceGroups/{groupName}/providers/Microsoft.Web/serverfarms/{appServicePlanName}\"."""
    reserved: Optional[bool] = rest_field(visibility=["read", "create"])
    """<code>true</code> if reserved; otherwise, <code>false</code>."""
    is_xenon: Optional[bool] = rest_field(name="isXenon", visibility=["read", "create"])
    """Obsolete: Hyper-V sandbox."""
    hyper_v: Optional[bool] = rest_field(name="hyperV", visibility=["read", "create"])
    """Hyper-V sandbox."""
    last_modified_time_utc: Optional[datetime.datetime] = rest_field(
        name="lastModifiedTimeUtc", visibility=["read"], format="rfc3339"
    )
    """Last time the app was modified, in UTC. Read-only."""
    dns_configuration: Optional["_models.SiteDnsConfig"] = rest_field(
        name="dnsConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """Property to configure various DNS related settings for a site."""
    outbound_vnet_routing: Optional["_models.OutboundVnetRouting"] = rest_field(
        name="outboundVnetRouting", visibility=["read", "create", "update", "delete", "query"]
    )
    """Property to configure various outbound traffic routing options over virtual network for a site."""
    site_config: Optional["_models.SiteConfig"] = rest_field(name="siteConfig", visibility=["create", "update"])
    """Configuration of an App Service app. This property is not returned in response to normal create
     and read requests since it may contain sensitive information."""
    function_app_config: Optional["_models.FunctionAppConfig"] = rest_field(
        name="functionAppConfig", visibility=["read", "create", "update", "delete", "query"]
    )
    """Configuration specific of the Azure Function app."""
    dapr_config: Optional["_models.DaprConfig"] = rest_field(
        name="daprConfig", visibility=["read", "create", "update", "delete", "query"]
    )
    """Dapr configuration of the app."""
    workload_profile_name: Optional[str] = rest_field(
        name="workloadProfileName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Workload profile name for function app to execute on."""
    resource_config: Optional["_models.ResourceConfig"] = rest_field(
        name="resourceConfig", visibility=["read", "create", "update", "delete", "query"]
    )
    """Function app resource requirements."""
    traffic_manager_host_names: Optional[list[str]] = rest_field(name="trafficManagerHostNames", visibility=["read"])
    """Azure Traffic Manager hostnames associated with the app. Read-only."""
    scm_site_also_stopped: Optional[bool] = rest_field(
        name="scmSiteAlsoStopped", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to stop SCM (KUDU) site when the app is stopped; otherwise,
     <code>false</code>. The default is <code>false</code>."""
    target_swap_slot: Optional[str] = rest_field(name="targetSwapSlot", visibility=["read"])
    """Specifies which deployment slot this app will swap into. Read-only."""
    hosting_environment_profile: Optional["_models.HostingEnvironmentProfile"] = rest_field(
        name="hostingEnvironmentProfile", visibility=["read", "create"]
    )
    """App Service Environment to use for the app."""
    client_affinity_enabled: Optional[bool] = rest_field(
        name="clientAffinityEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to enable client affinity; <code>false</code> to stop sending session
     affinity cookies, which route client requests in the same session to the same instance. Default
     is <code>true</code>."""
    client_affinity_partitioning_enabled: Optional[bool] = rest_field(
        name="clientAffinityPartitioningEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to enable client affinity partitioning using CHIPS cookies, this will add the
     <code>partitioned</code> property to the affinity cookies; <code>false</code> to stop sending
     partitioned affinity cookies. Default is <code>false</code>."""
    client_affinity_proxy_enabled: Optional[bool] = rest_field(
        name="clientAffinityProxyEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to override client affinity cookie domain with X-Forwarded-Host request
     header. <code>false</code> to use default domain. Default is <code>false</code>."""
    client_cert_enabled: Optional[bool] = rest_field(
        name="clientCertEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to enable client certificate authentication (TLS mutual authentication);
     otherwise, <code>false</code>. Default is <code>false</code>."""
    client_cert_mode: Optional[Union[str, "_models.ClientCertMode"]] = rest_field(
        name="clientCertMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """This composes with ClientCertEnabled setting.
 
      * ClientCertEnabled: false means ClientCert is ignored.
      * ClientCertEnabled: true and ClientCertMode: Required means ClientCert is required.
      * ClientCertEnabled: true and ClientCertMode: Optional means ClientCert is optional or
        accepted. Known values are: \"Required\", \"Optional\", and \"OptionalInteractiveUser\"."""
    client_cert_exclusion_paths: Optional[str] = rest_field(
        name="clientCertExclusionPaths", visibility=["read", "create", "update", "delete", "query"]
    )
    """client certificate authentication comma-separated exclusion paths."""
    ip_mode: Optional[Union[str, "_models.IPMode"]] = rest_field(
        name="ipMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """Specifies the IP mode of the app. Known values are: \"IPv4\", \"IPv6\", and \"IPv4AndIPv6\"."""
    end_to_end_encryption_enabled: Optional[bool] = rest_field(
        name="endToEndEncryptionEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether to use end to end encryption between the FrontEnd and the Worker."""
    ssh_enabled: Optional[bool] = rest_field(
        name="sshEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether to enable ssh access."""
    host_names_disabled: Optional[bool] = rest_field(
        name="hostNamesDisabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> to disable the public hostnames of the app; otherwise, <code>false</code>. If
     <code>true</code>, the app is only accessible via API management process."""
    custom_domain_verification_id: Optional[str] = rest_field(
        name="customDomainVerificationId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Unique identifier that verifies the custom domains assigned to the app. Customer will add this
     id to a txt record for verification."""
    outbound_ip_addresses: Optional[str] = rest_field(name="outboundIpAddresses", visibility=["read"])
    """List of IP addresses that the app uses for outbound connections (e.g. database access).
     Includes VIPs from tenants that site can be hosted with current settings. Read-only."""
    possible_outbound_ip_addresses: Optional[str] = rest_field(name="possibleOutboundIpAddresses", visibility=["read"])
    """List of IP addresses that the app uses for outbound connections (e.g. database access).
     Includes VIPs from all tenants except dataComponent. Read-only."""
    container_size: Optional[int] = rest_field(
        name="containerSize", visibility=["read", "create", "update", "delete", "query"]
    )
    """Size of the function container."""
    daily_memory_time_quota: Optional[int] = rest_field(
        name="dailyMemoryTimeQuota", visibility=["read", "create", "update", "delete", "query"]
    )
    """Maximum allowed daily memory-time quota (applicable on dynamic apps only)."""
    suspended_till: Optional[datetime.datetime] = rest_field(
        name="suspendedTill", visibility=["read"], format="rfc3339"
    )
    """App suspended till in case memory-time quota is exceeded."""
    max_number_of_workers: Optional[int] = rest_field(name="maxNumberOfWorkers", visibility=["read"])
    """Maximum number of workers. This only applies to Functions container."""
    cloning_info: Optional["_models.CloningInfo"] = rest_field(name="cloningInfo", visibility=["create"])
    """If specified during app creation, the app is cloned from a source app."""
    resource_group: Optional[str] = rest_field(name="resourceGroup", visibility=["read"])
    """Name of the resource group the app belongs to. Read-only."""
    is_default_container: Optional[bool] = rest_field(name="isDefaultContainer", visibility=["read"])
    """<code>true</code> if the app is a default container; otherwise, <code>false</code>."""
    default_host_name: Optional[str] = rest_field(name="defaultHostName", visibility=["read"])
    """Default hostname of the app. Read-only."""
    slot_swap_status: Optional["_models.SlotSwapStatus"] = rest_field(name="slotSwapStatus", visibility=["read"])
    """Status of the last deployment slot swap operation."""
    https_only: Optional[bool] = rest_field(
        name="httpsOnly", visibility=["read", "create", "update", "delete", "query"]
    )
    """HttpsOnly: configures a web site to accept only https requests. Issues redirect for http
     requests."""
    redundancy_mode: Optional[Union[str, "_models.RedundancyMode"]] = rest_field(
        name="redundancyMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """Site redundancy mode. Known values are: \"None\", \"Manual\", \"Failover\", \"ActiveActive\",
     and \"GeoRedundant\"."""
    in_progress_operation_id: Optional[str] = rest_field(name="inProgressOperationId", visibility=["read"])
    """Specifies an operation id if this site has a pending operation."""
    public_network_access: Optional[str] = rest_field(
        name="publicNetworkAccess", visibility=["read", "create", "update", "delete", "query"]
    )
    """Property to allow or block all public traffic. Allowed Values: 'Enabled', 'Disabled' or an
     empty string."""
    storage_account_required: Optional[bool] = rest_field(
        name="storageAccountRequired", visibility=["read", "create", "update", "delete", "query"]
    )
    """Checks if Customer provided storage account is required."""
    key_vault_reference_identity: Optional[str] = rest_field(
        name="keyVaultReferenceIdentity", visibility=["read", "create", "update", "delete", "query"]
    )
    """Identity to use for Key Vault Reference authentication."""
    auto_generated_domain_name_label_scope: Optional[Union[str, "_models.AutoGeneratedDomainNameLabelScope"]] = (
        rest_field(name="autoGeneratedDomainNameLabelScope", visibility=["read", "create", "update", "delete", "query"])
    )
    """Specifies the scope of uniqueness for the default hostname during resource creation. Known
     values are: \"TenantReuse\", \"SubscriptionReuse\", \"ResourceGroupReuse\", and \"NoReuse\"."""
    virtual_network_subnet_id: Optional[str] = rest_field(
        name="virtualNetworkSubnetId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Azure Resource Manager ID of the Virtual network and subnet to be joined by Regional VNET
     Integration. This must be of the form
     /subscriptions/{subscriptionName}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}."""
    managed_environment_id: Optional[str] = rest_field(
        name="managedEnvironmentId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Azure Resource Manager ID of the customer's selected Managed Environment on which to host this
     app. This must be of the form
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.App/managedEnvironments/{managedEnvironmentName}."""
    sku: Optional[str] = rest_field(visibility=["read"])
    """Current SKU of application based on associated App Service Plan. Some valid SKU values are
     Free, Shared, Basic, Dynamic, FlexConsumption, Standard, Premium, PremiumV2, PremiumV3,
     Isolated, IsolatedV2."""

    @overload
    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        enabled: Optional[bool] = None,
        host_name_ssl_states: Optional[list["_models.HostNameSslState"]] = None,
        server_farm_id: Optional[str] = None,
        reserved: Optional[bool] = None,
        is_xenon: Optional[bool] = None,
        hyper_v: Optional[bool] = None,
        dns_configuration: Optional["_models.SiteDnsConfig"] = None,
        outbound_vnet_routing: Optional["_models.OutboundVnetRouting"] = None,
        site_config: Optional["_models.SiteConfig"] = None,
        function_app_config: Optional["_models.FunctionAppConfig"] = None,
        dapr_config: Optional["_models.DaprConfig"] = None,
        workload_profile_name: Optional[str] = None,
        resource_config: Optional["_models.ResourceConfig"] = None,
        scm_site_also_stopped: Optional[bool] = None,
        hosting_environment_profile: Optional["_models.HostingEnvironmentProfile"] = None,
        client_affinity_enabled: Optional[bool] = None,
        client_affinity_partitioning_enabled: Optional[bool] = None,
        client_affinity_proxy_enabled: Optional[bool] = None,
        client_cert_enabled: Optional[bool] = None,
        client_cert_mode: Optional[Union[str, "_models.ClientCertMode"]] = None,
        client_cert_exclusion_paths: Optional[str] = None,
        ip_mode: Optional[Union[str, "_models.IPMode"]] = None,
        end_to_end_encryption_enabled: Optional[bool] = None,
        ssh_enabled: Optional[bool] = None,
        host_names_disabled: Optional[bool] = None,
        custom_domain_verification_id: Optional[str] = None,
        container_size: Optional[int] = None,
        daily_memory_time_quota: Optional[int] = None,
        cloning_info: Optional["_models.CloningInfo"] = None,
        https_only: Optional[bool] = None,
        redundancy_mode: Optional[Union[str, "_models.RedundancyMode"]] = None,
        public_network_access: Optional[str] = None,
        storage_account_required: Optional[bool] = None,
        key_vault_reference_identity: Optional[str] = None,
        auto_generated_domain_name_label_scope: Optional[
            Union[str, "_models.AutoGeneratedDomainNameLabelScope"]
        ] = None,
        virtual_network_subnet_id: Optional[str] = None,
        managed_environment_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SiteSourceControl(ProxyResource):
    """Source control configuration for an app.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: SiteSourceControl resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SiteSourceControlProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.SiteSourceControlProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SiteSourceControl resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "repo_url",
        "branch",
        "is_manual_integration",
        "is_git_hub_action",
        "deployment_rollback_enabled",
        "is_mercurial",
        "git_hub_action_configuration",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.SiteSourceControlProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SiteSourceControlProperties(_Model):
    """SiteSourceControl resource specific properties.

    :ivar repo_url: Repository or source control URL.
    :vartype repo_url: str
    :ivar branch: Name of branch to use for deployment.
    :vartype branch: str
    :ivar is_manual_integration: <code>true</code> to limit to manual integration;
     <code>false</code> to enable continuous integration (which configures webhooks into online
     repos like GitHub).
    :vartype is_manual_integration: bool
    :ivar is_git_hub_action: <code>true</code> if this is deployed via GitHub action.
    :vartype is_git_hub_action: bool
    :ivar deployment_rollback_enabled: <code>true</code> to enable deployment rollback; otherwise,
     <code>false</code>.
    :vartype deployment_rollback_enabled: bool
    :ivar is_mercurial: <code>true</code> for a Mercurial repository; <code>false</code> for a Git
     repository.
    :vartype is_mercurial: bool
    :ivar git_hub_action_configuration: If GitHub Action is selected, than the associated
     configuration.
    :vartype git_hub_action_configuration: ~azure.mgmt.web.models.GitHubActionConfiguration
    """

    repo_url: Optional[str] = rest_field(name="repoUrl", visibility=["read", "create"])
    """Repository or source control URL."""
    branch: Optional[str] = rest_field(visibility=["read", "create"])
    """Name of branch to use for deployment."""
    is_manual_integration: Optional[bool] = rest_field(name="isManualIntegration", visibility=["read", "create"])
    """<code>true</code> to limit to manual integration; <code>false</code> to enable continuous
     integration (which configures webhooks into online repos like GitHub)."""
    is_git_hub_action: Optional[bool] = rest_field(name="isGitHubAction", visibility=["read", "create"])
    """<code>true</code> if this is deployed via GitHub action."""
    deployment_rollback_enabled: Optional[bool] = rest_field(
        name="deploymentRollbackEnabled", visibility=["read", "create"]
    )
    """<code>true</code> to enable deployment rollback; otherwise, <code>false</code>."""
    is_mercurial: Optional[bool] = rest_field(name="isMercurial", visibility=["read", "create"])
    """<code>true</code> for a Mercurial repository; <code>false</code> for a Git repository."""
    git_hub_action_configuration: Optional["_models.GitHubActionConfiguration"] = rest_field(
        name="gitHubActionConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """If GitHub Action is selected, than the associated configuration."""

    @overload
    def __init__(
        self,
        *,
        repo_url: Optional[str] = None,
        branch: Optional[str] = None,
        is_manual_integration: Optional[bool] = None,
        is_git_hub_action: Optional[bool] = None,
        deployment_rollback_enabled: Optional[bool] = None,
        is_mercurial: Optional[bool] = None,
        git_hub_action_configuration: Optional["_models.GitHubActionConfiguration"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SkuCapacity(_Model):
    """Description of the App Service plan scale options.

    :ivar minimum: Minimum number of workers for this App Service plan SKU.
    :vartype minimum: int
    :ivar maximum: Maximum number of workers for this App Service plan SKU.
    :vartype maximum: int
    :ivar elastic_maximum: Maximum number of Elastic workers for this App Service plan SKU.
    :vartype elastic_maximum: int
    :ivar default: Default number of workers for this App Service plan SKU.
    :vartype default: int
    :ivar scale_type: Available scale configurations for an App Service plan.
    :vartype scale_type: str
    """

    minimum: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Minimum number of workers for this App Service plan SKU."""
    maximum: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Maximum number of workers for this App Service plan SKU."""
    elastic_maximum: Optional[int] = rest_field(
        name="elasticMaximum", visibility=["read", "create", "update", "delete", "query"]
    )
    """Maximum number of Elastic workers for this App Service plan SKU."""
    default: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Default number of workers for this App Service plan SKU."""
    scale_type: Optional[str] = rest_field(name="scaleType", visibility=["read", "create", "update", "delete", "query"])
    """Available scale configurations for an App Service plan."""

    @overload
    def __init__(
        self,
        *,
        minimum: Optional[int] = None,
        maximum: Optional[int] = None,
        elastic_maximum: Optional[int] = None,
        default: Optional[int] = None,
        scale_type: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SkuDescription(_Model):
    """Description of a SKU for a scalable resource.

    :ivar name: Name of the resource SKU.
    :vartype name: str
    :ivar tier: Service tier of the resource SKU.
    :vartype tier: str
    :ivar size: Size specifier of the resource SKU.
    :vartype size: str
    :ivar family: Family code of the resource SKU.
    :vartype family: str
    :ivar capacity: Current number of instances assigned to the resource.
    :vartype capacity: int
    :ivar sku_capacity: Min, max, and default scale values of the SKU.
    :vartype sku_capacity: ~azure.mgmt.web.models.SkuCapacity
    :ivar locations: Locations of the SKU.
    :vartype locations: list[str]
    :ivar capabilities: Capabilities of the SKU, e.g., is traffic manager enabled?.
    :vartype capabilities: list[~azure.mgmt.web.models.Capability]
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the resource SKU."""
    tier: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Service tier of the resource SKU."""
    size: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Size specifier of the resource SKU."""
    family: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Family code of the resource SKU."""
    capacity: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Current number of instances assigned to the resource."""
    sku_capacity: Optional["_models.SkuCapacity"] = rest_field(
        name="skuCapacity", visibility=["read", "create", "update", "delete", "query"]
    )
    """Min, max, and default scale values of the SKU."""
    locations: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Locations of the SKU."""
    capabilities: Optional[list["_models.Capability"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Capabilities of the SKU, e.g., is traffic manager enabled?."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        tier: Optional[str] = None,
        size: Optional[str] = None,
        family: Optional[str] = None,
        capacity: Optional[int] = None,
        sku_capacity: Optional["_models.SkuCapacity"] = None,
        locations: Optional[list[str]] = None,
        capabilities: Optional[list["_models.Capability"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SkuInfo(_Model):
    """SKU discovery information.

    :ivar resource_type: Resource type that this SKU applies to.
    :vartype resource_type: str
    :ivar sku: Name and tier of the SKU.
    :vartype sku: ~azure.mgmt.web.models.SkuDescription
    :ivar capacity: Min, max, and default scale values of the SKU.
    :vartype capacity: ~azure.mgmt.web.models.SkuCapacity
    """

    resource_type: Optional[str] = rest_field(
        name="resourceType", visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource type that this SKU applies to."""
    sku: Optional["_models.SkuDescription"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name and tier of the SKU."""
    capacity: Optional["_models.SkuCapacity"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Min, max, and default scale values of the SKU."""

    @overload
    def __init__(
        self,
        *,
        resource_type: Optional[str] = None,
        sku: Optional["_models.SkuDescription"] = None,
        capacity: Optional["_models.SkuCapacity"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SkuInfos(_Model):
    """Collection of SKU information.

    :ivar resource_type: Resource type that this SKU applies to.
    :vartype resource_type: str
    :ivar skus: List of SKUs the subscription is able to use.
    :vartype skus: list[~azure.mgmt.web.models.GlobalCsmSkuDescription]
    """

    resource_type: Optional[str] = rest_field(
        name="resourceType", visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource type that this SKU applies to."""
    skus: Optional[list["_models.GlobalCsmSkuDescription"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """List of SKUs the subscription is able to use."""

    @overload
    def __init__(
        self,
        *,
        resource_type: Optional[str] = None,
        skus: Optional[list["_models.GlobalCsmSkuDescription"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SlotConfigNames(_Model):
    """Names for connection strings, application settings, and external Azure storage account
    configuration identifiers to be marked as sticky to the deployment slot and not moved during a
    swap operation. This is valid for all deployment slots in an app.

    :ivar connection_string_names: List of connection string names.
    :vartype connection_string_names: list[str]
    :ivar app_setting_names: List of application settings names.
    :vartype app_setting_names: list[str]
    :ivar azure_storage_config_names: List of external Azure storage account identifiers.
    :vartype azure_storage_config_names: list[str]
    """

    connection_string_names: Optional[list[str]] = rest_field(
        name="connectionStringNames", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of connection string names."""
    app_setting_names: Optional[list[str]] = rest_field(
        name="appSettingNames", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of application settings names."""
    azure_storage_config_names: Optional[list[str]] = rest_field(
        name="azureStorageConfigNames", visibility=["read", "create", "update", "delete", "query"]
    )
    """List of external Azure storage account identifiers."""

    @overload
    def __init__(
        self,
        *,
        connection_string_names: Optional[list[str]] = None,
        app_setting_names: Optional[list[str]] = None,
        azure_storage_config_names: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SlotConfigNamesResource(ProxyResource):
    """Slot Config names azure resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: Core resource properties.
    :vartype properties: ~azure.mgmt.web.models.SlotConfigNames
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.SlotConfigNames"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Core resource properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["connection_string_names", "app_setting_names", "azure_storage_config_names"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.SlotConfigNames"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SlotDifference(ProxyOnlyResource):
    """A setting difference between two deployment slots of an app.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: SlotDifference resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SlotDifferenceProperties
    """

    properties: Optional["_models.SlotDifferenceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SlotDifference resource specific properties."""

    __flattened_items = [
        "level",
        "setting_type",
        "diff_rule",
        "setting_name",
        "value_in_current_slot",
        "value_in_target_slot",
        "description",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.SlotDifferenceProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SlotDifferenceProperties(_Model):
    """SlotDifference resource specific properties.

    :ivar level: Level of the difference: Information, Warning or Error.
    :vartype level: str
    :ivar setting_type: The type of the setting: General, AppSetting or ConnectionString.
    :vartype setting_type: str
    :ivar diff_rule: Rule that describes how to process the setting difference during a slot swap.
    :vartype diff_rule: str
    :ivar setting_name: Name of the setting.
    :vartype setting_name: str
    :ivar value_in_current_slot: Value of the setting in the current slot.
    :vartype value_in_current_slot: str
    :ivar value_in_target_slot: Value of the setting in the target slot.
    :vartype value_in_target_slot: str
    :ivar description: Description of the setting difference.
    :vartype description: str
    """

    level: Optional[str] = rest_field(visibility=["read"])
    """Level of the difference: Information, Warning or Error."""
    setting_type: Optional[str] = rest_field(name="settingType", visibility=["read"])
    """The type of the setting: General, AppSetting or ConnectionString."""
    diff_rule: Optional[str] = rest_field(name="diffRule", visibility=["read"])
    """Rule that describes how to process the setting difference during a slot swap."""
    setting_name: Optional[str] = rest_field(name="settingName", visibility=["read"])
    """Name of the setting."""
    value_in_current_slot: Optional[str] = rest_field(name="valueInCurrentSlot", visibility=["read"])
    """Value of the setting in the current slot."""
    value_in_target_slot: Optional[str] = rest_field(name="valueInTargetSlot", visibility=["read"])
    """Value of the setting in the target slot."""
    description: Optional[str] = rest_field(visibility=["read"])
    """Description of the setting difference."""


class SlotSwapStatus(_Model):
    """The status of the last successful slot swap operation.

    :ivar timestamp_utc: The time the last successful slot swap completed.
    :vartype timestamp_utc: ~datetime.datetime
    :ivar source_slot_name: The source slot of the last swap operation.
    :vartype source_slot_name: str
    :ivar destination_slot_name: The destination slot of the last swap operation.
    :vartype destination_slot_name: str
    """

    timestamp_utc: Optional[datetime.datetime] = rest_field(name="timestampUtc", visibility=["read"], format="rfc3339")
    """The time the last successful slot swap completed."""
    source_slot_name: Optional[str] = rest_field(name="sourceSlotName", visibility=["read"])
    """The source slot of the last swap operation."""
    destination_slot_name: Optional[str] = rest_field(name="destinationSlotName", visibility=["read"])
    """The destination slot of the last swap operation."""


class SlowRequestsBasedTrigger(_Model):
    """Trigger based on request execution time.

    :ivar time_taken: Time taken.
    :vartype time_taken: str
    :ivar path: Request Path.
    :vartype path: str
    :ivar count: Request Count.
    :vartype count: int
    :ivar time_interval: Time interval.
    :vartype time_interval: str
    """

    time_taken: Optional[str] = rest_field(name="timeTaken", visibility=["read", "create", "update", "delete", "query"])
    """Time taken."""
    path: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Request Path."""
    count: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Request Count."""
    time_interval: Optional[str] = rest_field(
        name="timeInterval", visibility=["read", "create", "update", "delete", "query"]
    )
    """Time interval."""

    @overload
    def __init__(
        self,
        *,
        time_taken: Optional[str] = None,
        path: Optional[str] = None,
        count: Optional[int] = None,
        time_interval: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Snapshot(ProxyOnlyResource):
    """A snapshot of an app.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: Snapshot resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SnapshotProperties
    """

    properties: Optional["_models.SnapshotProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Snapshot resource specific properties."""

    __flattened_items = ["time"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.SnapshotProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SnapshotProperties(_Model):
    """Snapshot resource specific properties.

    :ivar time: The time the snapshot was taken.
    :vartype time: str
    """

    time: Optional[str] = rest_field(visibility=["read"])
    """The time the snapshot was taken."""


class SnapshotRecoverySource(_Model):
    """Specifies the web app that snapshot contents will be retrieved from.

    :ivar location: Geographical location of the source web app, e.g. SouthEastAsia,
     SouthCentralUS.
    :vartype location: str
    :ivar id: ARM resource ID of the source app.
     /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}
     for production slots and
     /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/slots/{slotName}
     for other slots.
    :vartype id: str
    """

    location: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Geographical location of the source web app, e.g. SouthEastAsia, SouthCentralUS."""
    id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """ARM resource ID of the source app.
     /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}
     for production slots and
     /subscriptions/{subId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/slots/{slotName}
     for other slots."""

    @overload
    def __init__(
        self,
        *,
        location: Optional[str] = None,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SnapshotRestoreRequest(ProxyOnlyResource):
    """Details about app recovery operation.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: SnapshotRestoreRequest resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SnapshotRestoreRequestProperties
    """

    properties: Optional["_models.SnapshotRestoreRequestProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SnapshotRestoreRequest resource specific properties."""

    __flattened_items = [
        "snapshot_time",
        "recovery_source",
        "overwrite",
        "recover_configuration",
        "ignore_conflicting_host_names",
        "use_dr_secondary",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.SnapshotRestoreRequestProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SnapshotRestoreRequestProperties(_Model):
    """SnapshotRestoreRequest resource specific properties.

    :ivar snapshot_time: Point in time in which the app restore should be done, formatted as a
     DateTime string.
    :vartype snapshot_time: str
    :ivar recovery_source: Optional. Specifies the web app that snapshot contents will be retrieved
     from. If empty, the targeted web app will be used as the source.
    :vartype recovery_source: ~azure.mgmt.web.models.SnapshotRecoverySource
    :ivar overwrite: If <code>true</code> the restore operation can overwrite source app;
     otherwise, <code>false</code>. Required.
    :vartype overwrite: bool
    :ivar recover_configuration: If true, site configuration, in addition to content, will be
     reverted.
    :vartype recover_configuration: bool
    :ivar ignore_conflicting_host_names: If true, custom hostname conflicts will be ignored when
     recovering to a target web app. This setting is only necessary when RecoverConfiguration is
     enabled.
    :vartype ignore_conflicting_host_names: bool
    :ivar use_dr_secondary: If true, the snapshot is retrieved from DRSecondary endpoint.
    :vartype use_dr_secondary: bool
    """

    snapshot_time: Optional[str] = rest_field(
        name="snapshotTime", visibility=["read", "create", "update", "delete", "query"]
    )
    """Point in time in which the app restore should be done, formatted as a DateTime string."""
    recovery_source: Optional["_models.SnapshotRecoverySource"] = rest_field(
        name="recoverySource", visibility=["read", "create", "update", "delete", "query"]
    )
    """Optional. Specifies the web app that snapshot contents will be retrieved from. If empty, the
     targeted web app will be used as the source."""
    overwrite: bool = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """If <code>true</code> the restore operation can overwrite source app; otherwise,
     <code>false</code>. Required."""
    recover_configuration: Optional[bool] = rest_field(
        name="recoverConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """If true, site configuration, in addition to content, will be reverted."""
    ignore_conflicting_host_names: Optional[bool] = rest_field(
        name="ignoreConflictingHostNames", visibility=["read", "create", "update", "delete", "query"]
    )
    """If true, custom hostname conflicts will be ignored when recovering to a target web app. This
     setting is only necessary when RecoverConfiguration is enabled."""
    use_dr_secondary: Optional[bool] = rest_field(
        name="useDRSecondary", visibility=["read", "create", "update", "delete", "query"]
    )
    """If true, the snapshot is retrieved from DRSecondary endpoint."""

    @overload
    def __init__(
        self,
        *,
        overwrite: bool,
        snapshot_time: Optional[str] = None,
        recovery_source: Optional["_models.SnapshotRecoverySource"] = None,
        recover_configuration: Optional[bool] = None,
        ignore_conflicting_host_names: Optional[bool] = None,
        use_dr_secondary: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Solution(_Model):
    """Class Representing Solution for problems detected.

    :ivar id: Solution Id.
    :vartype id: float
    :ivar display_name: Display Name of the solution.
    :vartype display_name: str
    :ivar order: Order of the solution.
    :vartype order: float
    :ivar description: Description of the solution.
    :vartype description: str
    :ivar type: Type of Solution. Known values are: "QuickSolution", "DeepInvestigation", and
     "BestPractices".
    :vartype type: str or ~azure.mgmt.web.models.SolutionType
    :ivar data: Solution Data.
    :vartype data: list[list[~azure.mgmt.web.models.NameValuePair]]
    :ivar metadata: Solution Metadata.
    :vartype metadata: list[list[~azure.mgmt.web.models.NameValuePair]]
    """

    id: Optional[float] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Solution Id."""
    display_name: Optional[str] = rest_field(
        name="displayName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Display Name of the solution."""
    order: Optional[float] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Order of the solution."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Description of the solution."""
    type: Optional[Union[str, "_models.SolutionType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Type of Solution. Known values are: \"QuickSolution\", \"DeepInvestigation\", and
     \"BestPractices\"."""
    data: Optional[list[list["_models.NameValuePair"]]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Solution Data."""
    metadata: Optional[list[list["_models.NameValuePair"]]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Solution Metadata."""

    @overload
    def __init__(
        self,
        *,
        id: Optional[float] = None,  # pylint: disable=redefined-builtin
        display_name: Optional[str] = None,
        order: Optional[float] = None,
        description: Optional[str] = None,
        type: Optional[Union[str, "_models.SolutionType"]] = None,
        data: Optional[list[list["_models.NameValuePair"]]] = None,
        metadata: Optional[list[list["_models.NameValuePair"]]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SourceControl(ProxyResource):
    """The source control OAuth token.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: SourceControl resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SourceControlProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.SourceControlProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SourceControl resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["token", "token_secret", "refresh_token", "expiration_time"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.SourceControlProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SourceControlProperties(_Model):
    """SourceControl resource specific properties.

    :ivar token: OAuth access token.
    :vartype token: str
    :ivar token_secret: OAuth access token secret.
    :vartype token_secret: str
    :ivar refresh_token: OAuth refresh token.
    :vartype refresh_token: str
    :ivar expiration_time: OAuth token expiration.
    :vartype expiration_time: ~datetime.datetime
    """

    token: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """OAuth access token."""
    token_secret: Optional[str] = rest_field(
        name="tokenSecret", visibility=["read", "create", "update", "delete", "query"]
    )
    """OAuth access token secret."""
    refresh_token: Optional[str] = rest_field(
        name="refreshToken", visibility=["read", "create", "update", "delete", "query"]
    )
    """OAuth refresh token."""
    expiration_time: Optional[datetime.datetime] = rest_field(
        name="expirationTime", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """OAuth token expiration."""

    @overload
    def __init__(
        self,
        *,
        token: Optional[str] = None,
        token_secret: Optional[str] = None,
        refresh_token: Optional[str] = None,
        expiration_time: Optional[datetime.datetime] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StackMajorVersion(_Model):
    """Application stack major version.

    :ivar display_version: Application stack major version (display only).
    :vartype display_version: str
    :ivar runtime_version: Application stack major version (runtime only).
    :vartype runtime_version: str
    :ivar is_default: <code>true</code> if this is the default major version; otherwise,
     <code>false</code>.
    :vartype is_default: bool
    :ivar minor_versions: Minor versions associated with the major version.
    :vartype minor_versions: list[~azure.mgmt.web.models.StackMinorVersion]
    :ivar application_insights: <code>true</code> if this supports Application Insights; otherwise,
     <code>false</code>.
    :vartype application_insights: bool
    :ivar is_preview: <code>true</code> if this stack is in Preview, otherwise <code>false</code>.
    :vartype is_preview: bool
    :ivar is_deprecated: <code>true</code> if this stack has been deprecated, otherwise
     <code>false</code>.
    :vartype is_deprecated: bool
    :ivar is_hidden: <code>true</code> if this stack should be hidden for new customers on portal,
     otherwise <code>false</code>.
    :vartype is_hidden: bool
    :ivar app_settings_dictionary: <appSettings> <appSetting name="FUNCTIONS_WORKER_RUNTIME"
     value="dotnet" /> </appSettings> Example: All the function apps need AppSetting:
     "FUNCTIONS_WORKER_RUNTIME" to be set stack name.
    :vartype app_settings_dictionary: dict[str, any]
    :ivar site_config_properties_dictionary: <siteConfigProperties> <siteConfigProperty
     name="Use32BitWorkerProcess" value="false" /> </siteConfigProperties> Example: All Linux
     Function Apps, need Use32BitWorkerProcess to be set to 0.
    :vartype site_config_properties_dictionary: dict[str, any]
    """

    display_version: Optional[str] = rest_field(
        name="displayVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Application stack major version (display only)."""
    runtime_version: Optional[str] = rest_field(
        name="runtimeVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Application stack major version (runtime only)."""
    is_default: Optional[bool] = rest_field(
        name="isDefault", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if this is the default major version; otherwise, <code>false</code>."""
    minor_versions: Optional[list["_models.StackMinorVersion"]] = rest_field(
        name="minorVersions", visibility=["read", "create", "update", "delete", "query"]
    )
    """Minor versions associated with the major version."""
    application_insights: Optional[bool] = rest_field(
        name="applicationInsights", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if this supports Application Insights; otherwise, <code>false</code>."""
    is_preview: Optional[bool] = rest_field(
        name="isPreview", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if this stack is in Preview, otherwise <code>false</code>."""
    is_deprecated: Optional[bool] = rest_field(
        name="isDeprecated", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if this stack has been deprecated, otherwise <code>false</code>."""
    is_hidden: Optional[bool] = rest_field(name="isHidden", visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> if this stack should be hidden for new customers on portal, otherwise
     <code>false</code>."""
    app_settings_dictionary: Optional[dict[str, Any]] = rest_field(
        name="appSettingsDictionary", visibility=["read", "create", "update", "delete", "query"]
    )
    """<appSettings> <appSetting name=\"FUNCTIONS_WORKER_RUNTIME\" value=\"dotnet\" /> </appSettings>
     Example: All the function apps need AppSetting: \"FUNCTIONS_WORKER_RUNTIME\" to be set stack
     name."""
    site_config_properties_dictionary: Optional[dict[str, Any]] = rest_field(
        name="siteConfigPropertiesDictionary", visibility=["read", "create", "update", "delete", "query"]
    )
    """<siteConfigProperties> <siteConfigProperty name=\"Use32BitWorkerProcess\" value=\"false\" />
     </siteConfigProperties> Example: All Linux Function Apps, need Use32BitWorkerProcess to be set
     to 0."""

    @overload
    def __init__(
        self,
        *,
        display_version: Optional[str] = None,
        runtime_version: Optional[str] = None,
        is_default: Optional[bool] = None,
        minor_versions: Optional[list["_models.StackMinorVersion"]] = None,
        application_insights: Optional[bool] = None,
        is_preview: Optional[bool] = None,
        is_deprecated: Optional[bool] = None,
        is_hidden: Optional[bool] = None,
        app_settings_dictionary: Optional[dict[str, Any]] = None,
        site_config_properties_dictionary: Optional[dict[str, Any]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StackMinorVersion(_Model):
    """Application stack minor version.

    :ivar display_version: Application stack minor version (display only).
    :vartype display_version: str
    :ivar runtime_version: Application stack minor version (runtime only).
    :vartype runtime_version: str
    :ivar is_default: <code>true</code> if this is the default minor version; otherwise,
     <code>false</code>.
    :vartype is_default: bool
    :ivar is_remote_debugging_enabled: <code>true</code> if this supports Remote Debugging,
     otherwise <code>false</code>.
    :vartype is_remote_debugging_enabled: bool
    """

    display_version: Optional[str] = rest_field(
        name="displayVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Application stack minor version (display only)."""
    runtime_version: Optional[str] = rest_field(
        name="runtimeVersion", visibility=["read", "create", "update", "delete", "query"]
    )
    """Application stack minor version (runtime only)."""
    is_default: Optional[bool] = rest_field(
        name="isDefault", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if this is the default minor version; otherwise, <code>false</code>."""
    is_remote_debugging_enabled: Optional[bool] = rest_field(
        name="isRemoteDebuggingEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if this supports Remote Debugging, otherwise <code>false</code>."""

    @overload
    def __init__(
        self,
        *,
        display_version: Optional[str] = None,
        runtime_version: Optional[str] = None,
        is_default: Optional[bool] = None,
        is_remote_debugging_enabled: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StampCapacity(_Model):
    """Stamp capacity information.

    :ivar name: Name of the stamp.
    :vartype name: str
    :ivar available_capacity: Available capacity (# of machines, bytes of storage etc...).
    :vartype available_capacity: int
    :ivar total_capacity: Total capacity (# of machines, bytes of storage etc...).
    :vartype total_capacity: int
    :ivar unit: Name of the unit.
    :vartype unit: str
    :ivar compute_mode: Shared/dedicated workers. Known values are: "Shared", "Dedicated", and
     "Dynamic".
    :vartype compute_mode: str or ~azure.mgmt.web.models.ComputeModeOptions
    :ivar worker_size: Size of the machines. Known values are: "Small", "Medium", "Large", "D1",
     "D2", "D3", "SmallV3", "MediumV3", "LargeV3", "NestedSmall", "NestedSmallLinux", and "Default".
    :vartype worker_size: str or ~azure.mgmt.web.models.WorkerSizeOptions
    :ivar worker_size_id: Size ID of machines: 0 - Small 1 - Medium 2 - Large.
    :vartype worker_size_id: int
    :ivar exclude_from_capacity_allocation: If <code>true</code>, it includes basic apps. Basic
     apps are not used for capacity allocation.
    :vartype exclude_from_capacity_allocation: bool
    :ivar is_applicable_for_all_compute_modes: <code>true</code> if capacity is applicable for all
     apps; otherwise, <code>false</code>.
    :vartype is_applicable_for_all_compute_modes: bool
    :ivar site_mode: Shared or Dedicated.
    :vartype site_mode: str
    :ivar is_linux: Is this a linux stamp capacity.
    :vartype is_linux: bool
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the stamp."""
    available_capacity: Optional[int] = rest_field(
        name="availableCapacity", visibility=["read", "create", "update", "delete", "query"]
    )
    """Available capacity (# of machines, bytes of storage etc...)."""
    total_capacity: Optional[int] = rest_field(
        name="totalCapacity", visibility=["read", "create", "update", "delete", "query"]
    )
    """Total capacity (# of machines, bytes of storage etc...)."""
    unit: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the unit."""
    compute_mode: Optional[Union[str, "_models.ComputeModeOptions"]] = rest_field(
        name="computeMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """Shared/dedicated workers. Known values are: \"Shared\", \"Dedicated\", and \"Dynamic\"."""
    worker_size: Optional[Union[str, "_models.WorkerSizeOptions"]] = rest_field(
        name="workerSize", visibility=["read", "create", "update", "delete", "query"]
    )
    """Size of the machines. Known values are: \"Small\", \"Medium\", \"Large\", \"D1\", \"D2\",
     \"D3\", \"SmallV3\", \"MediumV3\", \"LargeV3\", \"NestedSmall\", \"NestedSmallLinux\", and
     \"Default\"."""
    worker_size_id: Optional[int] = rest_field(
        name="workerSizeId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Size ID of machines: 0 - Small 1 - Medium 2 - Large."""
    exclude_from_capacity_allocation: Optional[bool] = rest_field(
        name="excludeFromCapacityAllocation", visibility=["read", "create", "update", "delete", "query"]
    )
    """If <code>true</code>, it includes basic apps. Basic apps are not used for capacity allocation."""
    is_applicable_for_all_compute_modes: Optional[bool] = rest_field(
        name="isApplicableForAllComputeModes", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if capacity is applicable for all apps; otherwise, <code>false</code>."""
    site_mode: Optional[str] = rest_field(name="siteMode", visibility=["read", "create", "update", "delete", "query"])
    """Shared or Dedicated."""
    is_linux: Optional[bool] = rest_field(name="isLinux", visibility=["read", "create", "update", "delete", "query"])
    """Is this a linux stamp capacity."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        available_capacity: Optional[int] = None,
        total_capacity: Optional[int] = None,
        unit: Optional[str] = None,
        compute_mode: Optional[Union[str, "_models.ComputeModeOptions"]] = None,
        worker_size: Optional[Union[str, "_models.WorkerSizeOptions"]] = None,
        worker_size_id: Optional[int] = None,
        exclude_from_capacity_allocation: Optional[bool] = None,
        is_applicable_for_all_compute_modes: Optional[bool] = None,
        site_mode: Optional[str] = None,
        is_linux: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSite(_Model):
    """A static site.

    :ivar default_hostname: The default autogenerated hostname for the static site.
    :vartype default_hostname: str
    :ivar repository_url: URL for the repository of the static site.
    :vartype repository_url: str
    :ivar branch: The target branch in the repository.
    :vartype branch: str
    :ivar custom_domains: The custom domains associated with this static site.
    :vartype custom_domains: list[str]
    :ivar repository_token: A user's github repository token. This is used to setup the Github
     Actions workflow file and API secrets.
    :vartype repository_token: str
    :ivar build_properties: Build properties to configure on the repository.
    :vartype build_properties: ~azure.mgmt.web.models.StaticSiteBuildProperties
    :ivar private_endpoint_connections: Private endpoint connections.
    :vartype private_endpoint_connections:
     list[~azure.mgmt.web.models.ResponseMessageEnvelopeRemotePrivateEndpointConnection]
    :ivar staging_environment_policy: State indicating whether staging environments are allowed or
     not allowed for a static web app. Known values are: "Enabled" and "Disabled".
    :vartype staging_environment_policy: str or ~azure.mgmt.web.models.StagingEnvironmentPolicy
    :ivar allow_config_file_updates: <code>false</code> if config file is locked for this static
     web app; otherwise, <code>true</code>.
    :vartype allow_config_file_updates: bool
    :ivar template_properties: Template options for generating a new repository.
    :vartype template_properties: ~azure.mgmt.web.models.StaticSiteTemplateOptions
    :ivar content_distribution_endpoint: The content distribution endpoint for the static site.
    :vartype content_distribution_endpoint: str
    :ivar key_vault_reference_identity: Identity to use for Key Vault Reference authentication.
    :vartype key_vault_reference_identity: str
    :ivar user_provided_function_apps: User provided function apps registered with the static site.
    :vartype user_provided_function_apps:
     list[~azure.mgmt.web.models.StaticSiteUserProvidedFunctionApp]
    :ivar linked_backends: Backends linked to the static side.
    :vartype linked_backends: list[~azure.mgmt.web.models.StaticSiteLinkedBackend]
    :ivar provider: The provider that submitted the last deployment to the primary environment of
     the static site.
    :vartype provider: str
    :ivar enterprise_grade_cdn_status: State indicating the status of the enterprise grade CDN
     serving traffic to the static web app. Known values are: "Enabled", "Enabling", "Disabled", and
     "Disabling".
    :vartype enterprise_grade_cdn_status: str or ~azure.mgmt.web.models.EnterpriseGradeCdnStatus
    :ivar public_network_access: State indicating whether public traffic are allowed or not for a
     static web app. Allowed Values: 'Enabled', 'Disabled' or an empty string.
    :vartype public_network_access: str
    :ivar database_connections: Database connections for the static site.
    :vartype database_connections: list[~azure.mgmt.web.models.DatabaseConnectionOverview]
    """

    default_hostname: Optional[str] = rest_field(name="defaultHostname", visibility=["read"])
    """The default autogenerated hostname for the static site."""
    repository_url: Optional[str] = rest_field(
        name="repositoryUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """URL for the repository of the static site."""
    branch: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The target branch in the repository."""
    custom_domains: Optional[list[str]] = rest_field(name="customDomains", visibility=["read"])
    """The custom domains associated with this static site."""
    repository_token: Optional[str] = rest_field(
        name="repositoryToken", visibility=["read", "create", "update", "delete", "query"]
    )
    """A user's github repository token. This is used to setup the Github Actions workflow file and
     API secrets."""
    build_properties: Optional["_models.StaticSiteBuildProperties"] = rest_field(
        name="buildProperties", visibility=["read", "create", "update", "delete", "query"]
    )
    """Build properties to configure on the repository."""
    private_endpoint_connections: Optional[list["_models.ResponseMessageEnvelopeRemotePrivateEndpointConnection"]] = (
        rest_field(name="privateEndpointConnections", visibility=["read"])
    )
    """Private endpoint connections."""
    staging_environment_policy: Optional[Union[str, "_models.StagingEnvironmentPolicy"]] = rest_field(
        name="stagingEnvironmentPolicy", visibility=["read", "create", "update", "delete", "query"]
    )
    """State indicating whether staging environments are allowed or not allowed for a static web app.
     Known values are: \"Enabled\" and \"Disabled\"."""
    allow_config_file_updates: Optional[bool] = rest_field(
        name="allowConfigFileUpdates", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>false</code> if config file is locked for this static web app; otherwise,
     <code>true</code>."""
    template_properties: Optional["_models.StaticSiteTemplateOptions"] = rest_field(
        name="templateProperties", visibility=["read", "create", "update", "delete", "query"]
    )
    """Template options for generating a new repository."""
    content_distribution_endpoint: Optional[str] = rest_field(name="contentDistributionEndpoint", visibility=["read"])
    """The content distribution endpoint for the static site."""
    key_vault_reference_identity: Optional[str] = rest_field(name="keyVaultReferenceIdentity", visibility=["read"])
    """Identity to use for Key Vault Reference authentication."""
    user_provided_function_apps: Optional[list["_models.StaticSiteUserProvidedFunctionApp"]] = rest_field(
        name="userProvidedFunctionApps", visibility=["read"]
    )
    """User provided function apps registered with the static site."""
    linked_backends: Optional[list["_models.StaticSiteLinkedBackend"]] = rest_field(
        name="linkedBackends", visibility=["read"]
    )
    """Backends linked to the static side."""
    provider: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The provider that submitted the last deployment to the primary environment of the static site."""
    enterprise_grade_cdn_status: Optional[Union[str, "_models.EnterpriseGradeCdnStatus"]] = rest_field(
        name="enterpriseGradeCdnStatus", visibility=["read", "create", "update", "delete", "query"]
    )
    """State indicating the status of the enterprise grade CDN serving traffic to the static web app.
     Known values are: \"Enabled\", \"Enabling\", \"Disabled\", and \"Disabling\"."""
    public_network_access: Optional[str] = rest_field(
        name="publicNetworkAccess", visibility=["read", "create", "update", "delete", "query"]
    )
    """State indicating whether public traffic are allowed or not for a static web app. Allowed
     Values: 'Enabled', 'Disabled' or an empty string."""
    database_connections: Optional[list["_models.DatabaseConnectionOverview"]] = rest_field(
        name="databaseConnections", visibility=["read"]
    )
    """Database connections for the static site."""

    @overload
    def __init__(
        self,
        *,
        repository_url: Optional[str] = None,
        branch: Optional[str] = None,
        repository_token: Optional[str] = None,
        build_properties: Optional["_models.StaticSiteBuildProperties"] = None,
        staging_environment_policy: Optional[Union[str, "_models.StagingEnvironmentPolicy"]] = None,
        allow_config_file_updates: Optional[bool] = None,
        template_properties: Optional["_models.StaticSiteTemplateOptions"] = None,
        provider: Optional[str] = None,
        enterprise_grade_cdn_status: Optional[Union[str, "_models.EnterpriseGradeCdnStatus"]] = None,
        public_network_access: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSiteARMResource(TrackedResource):
    """Concrete tracked resource types can be created by aliasing this type using a specific property
    type.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: Core resource properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSite
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar sku: Description of a SKU for a scalable resource.
    :vartype sku: ~azure.mgmt.web.models.SkuDescription
    :ivar identity: Managed service identity.
    :vartype identity: ~azure.mgmt.web.models.ManagedServiceIdentity
    """

    properties: Optional["_models.StaticSite"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Core resource properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""
    sku: Optional["_models.SkuDescription"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Description of a SKU for a scalable resource."""
    identity: Optional["_models.ManagedServiceIdentity"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Managed service identity."""

    __flattened_items = [
        "default_hostname",
        "repository_url",
        "branch",
        "custom_domains",
        "repository_token",
        "build_properties",
        "private_endpoint_connections",
        "staging_environment_policy",
        "allow_config_file_updates",
        "template_properties",
        "content_distribution_endpoint",
        "key_vault_reference_identity",
        "user_provided_function_apps",
        "linked_backends",
        "provider",
        "enterprise_grade_cdn_status",
        "public_network_access",
        "database_connections",
    ]

    @overload
    def __init__(
        self,
        *,
        location: str,
        tags: Optional[dict[str, str]] = None,
        properties: Optional["_models.StaticSite"] = None,
        kind: Optional[str] = None,
        sku: Optional["_models.SkuDescription"] = None,
        identity: Optional["_models.ManagedServiceIdentity"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteBasicAuthPropertiesARMResource(ProxyResource):
    """Static site basic auth properties ARM resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: StaticSiteBasicAuthPropertiesARMResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSiteBasicAuthPropertiesARMResourceProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.StaticSiteBasicAuthPropertiesARMResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSiteBasicAuthPropertiesARMResource resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["password", "secret_url", "applicable_environments_mode", "environments", "secret_state"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.StaticSiteBasicAuthPropertiesARMResourceProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteBasicAuthPropertiesARMResourceProperties(_Model):  # pylint: disable=name-too-long
    """StaticSiteBasicAuthPropertiesARMResource resource specific properties.

    :ivar password: The password for basic auth.
    :vartype password: str
    :ivar secret_url: Url to the secret in Key Vault.
    :vartype secret_url: str
    :ivar applicable_environments_mode: State indicating if basic auth is enabled and for what
     environments it is active. Required.
    :vartype applicable_environments_mode: str
    :ivar environments: The list of enabled environments for Basic Auth if
     ApplicableEnvironmentsMode is set to SpecifiedEnvironments.
    :vartype environments: list[str]
    :ivar secret_state: State indicating if basic auth has a secret and what type it is.
    :vartype secret_state: str
    """

    password: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The password for basic auth."""
    secret_url: Optional[str] = rest_field(name="secretUrl", visibility=["read", "create", "update", "delete", "query"])
    """Url to the secret in Key Vault."""
    applicable_environments_mode: str = rest_field(
        name="applicableEnvironmentsMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """State indicating if basic auth is enabled and for what environments it is active. Required."""
    environments: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The list of enabled environments for Basic Auth if ApplicableEnvironmentsMode is set to
     SpecifiedEnvironments."""
    secret_state: Optional[str] = rest_field(name="secretState", visibility=["read"])
    """State indicating if basic auth has a secret and what type it is."""

    @overload
    def __init__(
        self,
        *,
        applicable_environments_mode: str,
        password: Optional[str] = None,
        secret_url: Optional[str] = None,
        environments: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSiteBuildARMResource(ProxyResource):
    """Static Site Build ARM resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: StaticSiteBuildARMResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSiteBuildARMResourceProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.StaticSiteBuildARMResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSiteBuildARMResource resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "build_id",
        "source_branch",
        "pull_request_title",
        "hostname",
        "created_time_utc",
        "last_updated_on",
        "status",
        "user_provided_function_apps",
        "linked_backends",
        "database_connections",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.StaticSiteBuildARMResourceProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteBuildARMResourceProperties(_Model):
    """StaticSiteBuildARMResource resource specific properties.

    :ivar build_id: An identifier for the static site build.
    :vartype build_id: str
    :ivar source_branch: The source branch.
    :vartype source_branch: str
    :ivar pull_request_title: The title of a pull request that a static site build is related to.
    :vartype pull_request_title: str
    :ivar hostname: The hostname for a static site build.
    :vartype hostname: str
    :ivar created_time_utc: When this build was created.
    :vartype created_time_utc: ~datetime.datetime
    :ivar last_updated_on: When this build was updated.
    :vartype last_updated_on: ~datetime.datetime
    :ivar status: The status of the static site build. Known values are: "WaitingForDeployment",
     "Uploading", "Deploying", "Ready", "Failed", "Deleting", and "Detached".
    :vartype status: str or ~azure.mgmt.web.models.BuildStatus
    :ivar user_provided_function_apps: User provided function apps registered with the static site
     build.
    :vartype user_provided_function_apps:
     list[~azure.mgmt.web.models.StaticSiteUserProvidedFunctionApp]
    :ivar linked_backends: Backends linked to the static side build.
    :vartype linked_backends: list[~azure.mgmt.web.models.StaticSiteLinkedBackend]
    :ivar database_connections: Database connections for the static site build.
    :vartype database_connections: list[~azure.mgmt.web.models.DatabaseConnectionOverview]
    """

    build_id: Optional[str] = rest_field(name="buildId", visibility=["read"])
    """An identifier for the static site build."""
    source_branch: Optional[str] = rest_field(name="sourceBranch", visibility=["read"])
    """The source branch."""
    pull_request_title: Optional[str] = rest_field(name="pullRequestTitle", visibility=["read"])
    """The title of a pull request that a static site build is related to."""
    hostname: Optional[str] = rest_field(visibility=["read"])
    """The hostname for a static site build."""
    created_time_utc: Optional[datetime.datetime] = rest_field(
        name="createdTimeUtc", visibility=["read"], format="rfc3339"
    )
    """When this build was created."""
    last_updated_on: Optional[datetime.datetime] = rest_field(
        name="lastUpdatedOn", visibility=["read"], format="rfc3339"
    )
    """When this build was updated."""
    status: Optional[Union[str, "_models.BuildStatus"]] = rest_field(visibility=["read"])
    """The status of the static site build. Known values are: \"WaitingForDeployment\", \"Uploading\",
     \"Deploying\", \"Ready\", \"Failed\", \"Deleting\", and \"Detached\"."""
    user_provided_function_apps: Optional[list["_models.StaticSiteUserProvidedFunctionApp"]] = rest_field(
        name="userProvidedFunctionApps", visibility=["read"]
    )
    """User provided function apps registered with the static site build."""
    linked_backends: Optional[list["_models.StaticSiteLinkedBackend"]] = rest_field(
        name="linkedBackends", visibility=["read"]
    )
    """Backends linked to the static side build."""
    database_connections: Optional[list["_models.DatabaseConnectionOverview"]] = rest_field(
        name="databaseConnections", visibility=["read"]
    )
    """Database connections for the static site build."""


class StaticSiteBuildProperties(_Model):
    """Build properties for the static site.

    :ivar app_location: The path to the app code within the repository.
    :vartype app_location: str
    :ivar api_location: The path to the api code within the repository.
    :vartype api_location: str
    :ivar app_artifact_location: Deprecated: The path of the app artifacts after building
     (deprecated in favor of OutputLocation).
    :vartype app_artifact_location: str
    :ivar output_location: The output path of the app after building.
    :vartype output_location: str
    :ivar app_build_command: A custom command to run during deployment of the static content
     application.
    :vartype app_build_command: str
    :ivar api_build_command: A custom command to run during deployment of the Azure Functions API
     application.
    :vartype api_build_command: str
    :ivar skip_github_action_workflow_generation: Skip Github Action workflow generation.
    :vartype skip_github_action_workflow_generation: bool
    :ivar github_action_secret_name_override: Github Action secret name override.
    :vartype github_action_secret_name_override: str
    """

    app_location: Optional[str] = rest_field(
        name="appLocation", visibility=["read", "create", "update", "delete", "query"]
    )
    """The path to the app code within the repository."""
    api_location: Optional[str] = rest_field(
        name="apiLocation", visibility=["read", "create", "update", "delete", "query"]
    )
    """The path to the api code within the repository."""
    app_artifact_location: Optional[str] = rest_field(
        name="appArtifactLocation", visibility=["read", "create", "update", "delete", "query"]
    )
    """Deprecated: The path of the app artifacts after building (deprecated in favor of
     OutputLocation)."""
    output_location: Optional[str] = rest_field(
        name="outputLocation", visibility=["read", "create", "update", "delete", "query"]
    )
    """The output path of the app after building."""
    app_build_command: Optional[str] = rest_field(
        name="appBuildCommand", visibility=["read", "create", "update", "delete", "query"]
    )
    """A custom command to run during deployment of the static content application."""
    api_build_command: Optional[str] = rest_field(
        name="apiBuildCommand", visibility=["read", "create", "update", "delete", "query"]
    )
    """A custom command to run during deployment of the Azure Functions API application."""
    skip_github_action_workflow_generation: Optional[bool] = rest_field(
        name="skipGithubActionWorkflowGeneration", visibility=["read", "create", "update", "delete", "query"]
    )
    """Skip Github Action workflow generation."""
    github_action_secret_name_override: Optional[str] = rest_field(
        name="githubActionSecretNameOverride", visibility=["read", "create", "update", "delete", "query"]
    )
    """Github Action secret name override."""

    @overload
    def __init__(
        self,
        *,
        app_location: Optional[str] = None,
        api_location: Optional[str] = None,
        app_artifact_location: Optional[str] = None,
        output_location: Optional[str] = None,
        app_build_command: Optional[str] = None,
        api_build_command: Optional[str] = None,
        skip_github_action_workflow_generation: Optional[bool] = None,
        github_action_secret_name_override: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSiteCustomDomainOverviewARMResource(ProxyResource):  # pylint: disable=name-too-long
    """Static Site Custom Domain Overview ARM resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: StaticSiteCustomDomainOverviewARMResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSiteCustomDomainOverviewARMResourceProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.StaticSiteCustomDomainOverviewARMResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSiteCustomDomainOverviewARMResource resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["domain_name", "created_on", "status", "validation_token", "error_message"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.StaticSiteCustomDomainOverviewARMResourceProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteCustomDomainOverviewARMResourceProperties(_Model):  # pylint: disable=name-too-long
    """StaticSiteCustomDomainOverviewARMResource resource specific properties.

    :ivar domain_name: The domain name for the static site custom domain.
    :vartype domain_name: str
    :ivar created_on: The date and time on which the custom domain was created for the static site.
    :vartype created_on: ~datetime.datetime
    :ivar status: The status of the custom domain. Known values are: "RetrievingValidationToken",
     "Validating", "Adding", "Ready", "Failed", "Deleting", and "Unhealthy".
    :vartype status: str or ~azure.mgmt.web.models.CustomDomainStatus
    :ivar validation_token: The TXT record validation token.
    :vartype validation_token: str
    :ivar error_message:
    :vartype error_message: str
    """

    domain_name: Optional[str] = rest_field(name="domainName", visibility=["read"])
    """The domain name for the static site custom domain."""
    created_on: Optional[datetime.datetime] = rest_field(name="createdOn", visibility=["read"], format="rfc3339")
    """The date and time on which the custom domain was created for the static site."""
    status: Optional[Union[str, "_models.CustomDomainStatus"]] = rest_field(visibility=["read"])
    """The status of the custom domain. Known values are: \"RetrievingValidationToken\",
     \"Validating\", \"Adding\", \"Ready\", \"Failed\", \"Deleting\", and \"Unhealthy\"."""
    validation_token: Optional[str] = rest_field(name="validationToken", visibility=["read"])
    """The TXT record validation token."""
    error_message: Optional[str] = rest_field(name="errorMessage", visibility=["read"])


class StaticSiteCustomDomainRequestPropertiesARMResource(ProxyOnlyResource):  # pylint: disable=name-too-long
    """Static Site Custom Domain Request Properties ARM resource.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: StaticSiteCustomDomainRequestPropertiesARMResource resource specific
     properties.
    :vartype properties:
     ~azure.mgmt.web.models.StaticSiteCustomDomainRequestPropertiesARMResourceProperties
    """

    properties: Optional["_models.StaticSiteCustomDomainRequestPropertiesARMResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSiteCustomDomainRequestPropertiesARMResource resource specific properties."""

    __flattened_items = ["validation_method"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StaticSiteCustomDomainRequestPropertiesARMResourceProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteCustomDomainRequestPropertiesARMResourceProperties(_Model):  # pylint: disable=name-too-long
    """StaticSiteCustomDomainRequestPropertiesARMResource resource specific properties.

    :ivar validation_method: Validation method for adding a custom domain.
    :vartype validation_method: str
    """

    validation_method: Optional[str] = rest_field(
        name="validationMethod", visibility=["read", "create", "update", "delete", "query"]
    )
    """Validation method for adding a custom domain."""

    @overload
    def __init__(
        self,
        *,
        validation_method: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSiteDatabaseConnectionConfigurationFileOverview(_Model):  # pylint: disable=name-too-long
    """A database connection configuration file.

    :ivar file_name: The name of the configuration file.
    :vartype file_name: str
    :ivar contents: The Base64 encoding of the file contents.
    :vartype contents: str
    :ivar type: The type of configuration file.
    :vartype type: str
    """

    file_name: Optional[str] = rest_field(name="fileName", visibility=["read"])
    """The name of the configuration file."""
    contents: Optional[str] = rest_field(visibility=["read"])
    """The Base64 encoding of the file contents."""
    type: Optional[str] = rest_field(visibility=["read"])
    """The type of configuration file."""


class StaticSiteFunctionOverviewARMResource(ProxyOnlyResource):
    """Static Site Function Overview ARM resource.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: StaticSiteFunctionOverviewARMResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSiteFunctionOverviewARMResourceProperties
    """

    properties: Optional["_models.StaticSiteFunctionOverviewARMResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSiteFunctionOverviewARMResource resource specific properties."""

    __flattened_items = ["function_name", "trigger_type"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StaticSiteFunctionOverviewARMResourceProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteFunctionOverviewARMResourceProperties(_Model):  # pylint: disable=name-too-long
    """StaticSiteFunctionOverviewARMResource resource specific properties.

    :ivar function_name: The name for the function.
    :vartype function_name: str
    :ivar trigger_type: The trigger type of the function. Known values are: "HttpTrigger" and
     "Unknown".
    :vartype trigger_type: str or ~azure.mgmt.web.models.TriggerTypes
    """

    function_name: Optional[str] = rest_field(name="functionName", visibility=["read"])
    """The name for the function."""
    trigger_type: Optional[Union[str, "_models.TriggerTypes"]] = rest_field(name="triggerType", visibility=["read"])
    """The trigger type of the function. Known values are: \"HttpTrigger\" and \"Unknown\"."""


class StaticSiteLinkedBackend(_Model):
    """Static Site Linked Backend ARM resource.

    :ivar backend_resource_id: The resource id of the backend linked to the static site.
    :vartype backend_resource_id: str
    :ivar region: The region of the backend linked to the static site.
    :vartype region: str
    :ivar created_on: The date and time on which the backend was linked to the static site.
    :vartype created_on: ~datetime.datetime
    :ivar provisioning_state: The provisioning state of the linking process.
    :vartype provisioning_state: str
    """

    backend_resource_id: Optional[str] = rest_field(
        name="backendResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The resource id of the backend linked to the static site."""
    region: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The region of the backend linked to the static site."""
    created_on: Optional[datetime.datetime] = rest_field(name="createdOn", visibility=["read"], format="rfc3339")
    """The date and time on which the backend was linked to the static site."""
    provisioning_state: Optional[str] = rest_field(name="provisioningState", visibility=["read"])
    """The provisioning state of the linking process."""

    @overload
    def __init__(
        self,
        *,
        backend_resource_id: Optional[str] = None,
        region: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSiteLinkedBackendARMResource(ProxyResource):
    """Static Site Linked Backend ARM resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: StaticSiteLinkedBackendARMResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSiteLinkedBackendARMResourceProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.StaticSiteLinkedBackendARMResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSiteLinkedBackendARMResource resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["backend_resource_id", "region", "created_on", "provisioning_state"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.StaticSiteLinkedBackendARMResourceProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteLinkedBackendARMResourceProperties(_Model):  # pylint: disable=name-too-long
    """StaticSiteLinkedBackendARMResource resource specific properties.

    :ivar backend_resource_id: The resource id of the backend linked to the static site.
    :vartype backend_resource_id: str
    :ivar region: The region of the backend linked to the static site.
    :vartype region: str
    :ivar created_on: The date and time on which the backend was linked to the static site.
    :vartype created_on: ~datetime.datetime
    :ivar provisioning_state: The provisioning state of the linking process.
    :vartype provisioning_state: str
    """

    backend_resource_id: Optional[str] = rest_field(
        name="backendResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The resource id of the backend linked to the static site."""
    region: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The region of the backend linked to the static site."""
    created_on: Optional[datetime.datetime] = rest_field(name="createdOn", visibility=["read"], format="rfc3339")
    """The date and time on which the backend was linked to the static site."""
    provisioning_state: Optional[str] = rest_field(name="provisioningState", visibility=["read"])
    """The provisioning state of the linking process."""

    @overload
    def __init__(
        self,
        *,
        backend_resource_id: Optional[str] = None,
        region: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSitePatchResource(ProxyOnlyResource):
    """ARM resource for a static site when patching.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: Core resource properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSite
    """

    properties: Optional["_models.StaticSite"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Core resource properties."""

    __flattened_items = [
        "default_hostname",
        "repository_url",
        "branch",
        "custom_domains",
        "repository_token",
        "build_properties",
        "private_endpoint_connections",
        "staging_environment_policy",
        "allow_config_file_updates",
        "template_properties",
        "content_distribution_endpoint",
        "key_vault_reference_identity",
        "user_provided_function_apps",
        "linked_backends",
        "provider",
        "enterprise_grade_cdn_status",
        "public_network_access",
        "database_connections",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StaticSite"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteResetPropertiesARMResource(ProxyOnlyResource):
    """Static Site Reset Properties ARM resource.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: StaticSiteResetPropertiesARMResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSiteResetPropertiesARMResourceProperties
    """

    properties: Optional["_models.StaticSiteResetPropertiesARMResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSiteResetPropertiesARMResource resource specific properties."""

    __flattened_items = ["repository_token", "should_update_repository"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StaticSiteResetPropertiesARMResourceProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteResetPropertiesARMResourceProperties(_Model):  # pylint: disable=name-too-long
    """StaticSiteResetPropertiesARMResource resource specific properties.

    :ivar repository_token: The token which proves admin privileges to the repository.
    :vartype repository_token: str
    :ivar should_update_repository: Determines whether the repository should be updated with the
     new properties.
    :vartype should_update_repository: bool
    """

    repository_token: Optional[str] = rest_field(
        name="repositoryToken", visibility=["read", "create", "update", "delete", "query"]
    )
    """The token which proves admin privileges to the repository."""
    should_update_repository: Optional[bool] = rest_field(
        name="shouldUpdateRepository", visibility=["read", "create", "update", "delete", "query"]
    )
    """Determines whether the repository should be updated with the new properties."""

    @overload
    def __init__(
        self,
        *,
        repository_token: Optional[str] = None,
        should_update_repository: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSitesWorkflowPreview(ProxyOnlyResource):
    """Preview for the Static Site Workflow to be generated.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: StaticSitesWorkflowPreview resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSitesWorkflowPreviewProperties
    """

    properties: Optional["_models.StaticSitesWorkflowPreviewProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSitesWorkflowPreview resource specific properties."""

    __flattened_items = ["path", "contents"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StaticSitesWorkflowPreviewProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSitesWorkflowPreviewProperties(_Model):
    """StaticSitesWorkflowPreview resource specific properties.

    :ivar path: The path for the workflow file to be generated.
    :vartype path: str
    :ivar contents: The contents for the workflow file to be generated.
    :vartype contents: str
    """

    path: Optional[str] = rest_field(visibility=["read"])
    """The path for the workflow file to be generated."""
    contents: Optional[str] = rest_field(visibility=["read"])
    """The contents for the workflow file to be generated."""


class StaticSitesWorkflowPreviewRequest(ProxyOnlyResource):
    """Request entity for previewing the Static Site workflow.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: StaticSitesWorkflowPreviewRequest resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSitesWorkflowPreviewRequestProperties
    """

    properties: Optional["_models.StaticSitesWorkflowPreviewRequestProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSitesWorkflowPreviewRequest resource specific properties."""

    __flattened_items = ["repository_url", "branch", "build_properties"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StaticSitesWorkflowPreviewRequestProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSitesWorkflowPreviewRequestProperties(_Model):  # pylint: disable=name-too-long
    """StaticSitesWorkflowPreviewRequest resource specific properties.

    :ivar repository_url: URL for the repository of the static site.
    :vartype repository_url: str
    :ivar branch: The target branch in the repository.
    :vartype branch: str
    :ivar build_properties: Build properties to configure on the repository.
    :vartype build_properties: ~azure.mgmt.web.models.StaticSiteBuildProperties
    """

    repository_url: Optional[str] = rest_field(
        name="repositoryUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """URL for the repository of the static site."""
    branch: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The target branch in the repository."""
    build_properties: Optional["_models.StaticSiteBuildProperties"] = rest_field(
        name="buildProperties", visibility=["read", "create", "update", "delete", "query"]
    )
    """Build properties to configure on the repository."""

    @overload
    def __init__(
        self,
        *,
        repository_url: Optional[str] = None,
        branch: Optional[str] = None,
        build_properties: Optional["_models.StaticSiteBuildProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSiteTemplateOptions(_Model):
    """Template Options for the static site.

    :ivar template_repository_url: URL of the template repository. The newly generated repository
     will be based on this one.
    :vartype template_repository_url: str
    :ivar owner: Owner of the newly generated repository.
    :vartype owner: str
    :ivar repository_name: Name of the newly generated repository.
    :vartype repository_name: str
    :ivar description: Description of the newly generated repository.
    :vartype description: str
    :ivar is_private: Whether or not the newly generated repository is a private repository.
     Defaults to false (i.e. public).
    :vartype is_private: bool
    """

    template_repository_url: Optional[str] = rest_field(
        name="templateRepositoryUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """URL of the template repository. The newly generated repository will be based on this one."""
    owner: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Owner of the newly generated repository."""
    repository_name: Optional[str] = rest_field(
        name="repositoryName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Name of the newly generated repository."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Description of the newly generated repository."""
    is_private: Optional[bool] = rest_field(
        name="isPrivate", visibility=["read", "create", "update", "delete", "query"]
    )
    """Whether or not the newly generated repository is a private repository. Defaults to false (i.e.
     public)."""

    @overload
    def __init__(
        self,
        *,
        template_repository_url: Optional[str] = None,
        owner: Optional[str] = None,
        repository_name: Optional[str] = None,
        description: Optional[str] = None,
        is_private: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSiteUserARMResource(ProxyOnlyResource):
    """Static Site User ARM resource.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: StaticSiteUserARMResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSiteUserARMResourceProperties
    """

    properties: Optional["_models.StaticSiteUserARMResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSiteUserARMResource resource specific properties."""

    __flattened_items = ["provider", "user_id", "display_name", "roles"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StaticSiteUserARMResourceProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteUserARMResourceProperties(_Model):
    """StaticSiteUserARMResource resource specific properties.

    :ivar provider: The identity provider for the static site user.
    :vartype provider: str
    :ivar user_id: The user id for the static site user.
    :vartype user_id: str
    :ivar display_name: The display name for the static site user.
    :vartype display_name: str
    :ivar roles: The roles for the static site user, in free-form string format.
    :vartype roles: str
    """

    provider: Optional[str] = rest_field(visibility=["read"])
    """The identity provider for the static site user."""
    user_id: Optional[str] = rest_field(name="userId", visibility=["read"])
    """The user id for the static site user."""
    display_name: Optional[str] = rest_field(name="displayName", visibility=["read"])
    """The display name for the static site user."""
    roles: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The roles for the static site user, in free-form string format."""

    @overload
    def __init__(
        self,
        *,
        roles: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSiteUserInvitationRequestResource(ProxyOnlyResource):
    """Static sites user roles invitation resource.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: StaticSiteUserInvitationRequestResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSiteUserInvitationRequestResourceProperties
    """

    properties: Optional["_models.StaticSiteUserInvitationRequestResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSiteUserInvitationRequestResource resource specific properties."""

    __flattened_items = ["domain", "provider", "user_details", "roles", "num_hours_to_expiration"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StaticSiteUserInvitationRequestResourceProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteUserInvitationRequestResourceProperties(_Model):  # pylint: disable=name-too-long
    """StaticSiteUserInvitationRequestResource resource specific properties.

    :ivar domain: The domain name for the static site custom domain.
    :vartype domain: str
    :ivar provider: The identity provider for the static site user.
    :vartype provider: str
    :ivar user_details: The user id for the static site user.
    :vartype user_details: str
    :ivar roles: The roles for the static site user, in free-form string format.
    :vartype roles: str
    :ivar num_hours_to_expiration: The number of hours the sas token stays valid.
    :vartype num_hours_to_expiration: int
    """

    domain: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The domain name for the static site custom domain."""
    provider: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The identity provider for the static site user."""
    user_details: Optional[str] = rest_field(
        name="userDetails", visibility=["read", "create", "update", "delete", "query"]
    )
    """The user id for the static site user."""
    roles: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The roles for the static site user, in free-form string format."""
    num_hours_to_expiration: Optional[int] = rest_field(
        name="numHoursToExpiration", visibility=["read", "create", "update", "delete", "query"]
    )
    """The number of hours the sas token stays valid."""

    @overload
    def __init__(
        self,
        *,
        domain: Optional[str] = None,
        provider: Optional[str] = None,
        user_details: Optional[str] = None,
        roles: Optional[str] = None,
        num_hours_to_expiration: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSiteUserInvitationResponseResource(ProxyOnlyResource):
    """Static sites user roles invitation link resource.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: StaticSiteUserInvitationResponseResource resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSiteUserInvitationResponseResourceProperties
    """

    properties: Optional["_models.StaticSiteUserInvitationResponseResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSiteUserInvitationResponseResource resource specific properties."""

    __flattened_items = ["expires_on", "invitation_url"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StaticSiteUserInvitationResponseResourceProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteUserInvitationResponseResourceProperties(_Model):  # pylint: disable=name-too-long
    """StaticSiteUserInvitationResponseResource resource specific properties.

    :ivar expires_on: The expiration time of the invitation.
    :vartype expires_on: ~datetime.datetime
    :ivar invitation_url: The url for the invitation link.
    :vartype invitation_url: str
    """

    expires_on: Optional[datetime.datetime] = rest_field(name="expiresOn", visibility=["read"], format="rfc3339")
    """The expiration time of the invitation."""
    invitation_url: Optional[str] = rest_field(name="invitationUrl", visibility=["read"])
    """The url for the invitation link."""


class StaticSiteUserProvidedFunctionApp(ProxyOnlyResource):
    """A static site user provided function.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: StaticSiteUserProvidedFunctionApp resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSiteUserProvidedFunctionAppProperties
    """

    properties: Optional["_models.StaticSiteUserProvidedFunctionAppProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSiteUserProvidedFunctionApp resource specific properties."""

    __flattened_items = ["function_app_resource_id", "function_app_region", "created_on"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StaticSiteUserProvidedFunctionAppProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteUserProvidedFunctionAppARMResource(ProxyResource):  # pylint: disable=name-too-long
    """Static Site User Provided Function App ARM resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: StaticSiteUserProvidedFunctionAppARMResource resource specific properties.
    :vartype properties:
     ~azure.mgmt.web.models.StaticSiteUserProvidedFunctionAppARMResourceProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.StaticSiteUserProvidedFunctionAppARMResourceProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StaticSiteUserProvidedFunctionAppARMResource resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["function_app_resource_id", "function_app_region", "created_on"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.StaticSiteUserProvidedFunctionAppARMResourceProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StaticSiteUserProvidedFunctionAppARMResourceProperties(_Model):  # pylint: disable=name-too-long
    """StaticSiteUserProvidedFunctionAppARMResource resource specific properties.

    :ivar function_app_resource_id: The resource id of the function app registered with the static
     site.
    :vartype function_app_resource_id: str
    :ivar function_app_region: The region of the function app registered with the static site.
    :vartype function_app_region: str
    :ivar created_on: The date and time on which the function app was registered with the static
     site.
    :vartype created_on: ~datetime.datetime
    """

    function_app_resource_id: Optional[str] = rest_field(
        name="functionAppResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The resource id of the function app registered with the static site."""
    function_app_region: Optional[str] = rest_field(
        name="functionAppRegion", visibility=["read", "create", "update", "delete", "query"]
    )
    """The region of the function app registered with the static site."""
    created_on: Optional[datetime.datetime] = rest_field(name="createdOn", visibility=["read"], format="rfc3339")
    """The date and time on which the function app was registered with the static site."""

    @overload
    def __init__(
        self,
        *,
        function_app_resource_id: Optional[str] = None,
        function_app_region: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSiteUserProvidedFunctionAppProperties(_Model):  # pylint: disable=name-too-long
    """StaticSiteUserProvidedFunctionApp resource specific properties.

    :ivar function_app_resource_id: The resource id of the function app registered with the static
     site.
    :vartype function_app_resource_id: str
    :ivar function_app_region: The region of the function app registered with the static site.
    :vartype function_app_region: str
    :ivar created_on: The date and time on which the function app was registered with the static
     site.
    :vartype created_on: ~datetime.datetime
    """

    function_app_resource_id: Optional[str] = rest_field(
        name="functionAppResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The resource id of the function app registered with the static site."""
    function_app_region: Optional[str] = rest_field(
        name="functionAppRegion", visibility=["read", "create", "update", "delete", "query"]
    )
    """The region of the function app registered with the static site."""
    created_on: Optional[datetime.datetime] = rest_field(name="createdOn", visibility=["read"], format="rfc3339")
    """The date and time on which the function app was registered with the static site."""

    @overload
    def __init__(
        self,
        *,
        function_app_resource_id: Optional[str] = None,
        function_app_region: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSiteZipDeployment(_Model):
    """A static site zip deployment.

    :ivar app_zip_url: URL for the zipped app content.
    :vartype app_zip_url: str
    :ivar api_zip_url: URL for the zipped api content.
    :vartype api_zip_url: str
    :ivar deployment_title: A title to label the deployment.
    :vartype deployment_title: str
    :ivar provider: The provider submitting this deployment.
    :vartype provider: str
    :ivar function_language: The language of the api content, if it exists.
    :vartype function_language: str
    """

    app_zip_url: Optional[str] = rest_field(
        name="appZipUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """URL for the zipped app content."""
    api_zip_url: Optional[str] = rest_field(
        name="apiZipUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """URL for the zipped api content."""
    deployment_title: Optional[str] = rest_field(
        name="deploymentTitle", visibility=["read", "create", "update", "delete", "query"]
    )
    """A title to label the deployment."""
    provider: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The provider submitting this deployment."""
    function_language: Optional[str] = rest_field(
        name="functionLanguage", visibility=["read", "create", "update", "delete", "query"]
    )
    """The language of the api content, if it exists."""

    @overload
    def __init__(
        self,
        *,
        app_zip_url: Optional[str] = None,
        api_zip_url: Optional[str] = None,
        deployment_title: Optional[str] = None,
        provider: Optional[str] = None,
        function_language: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StaticSiteZipDeploymentARMResource(ProxyOnlyResource):
    """Static site zip deployment ARM resource.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: Core resource properties.
    :vartype properties: ~azure.mgmt.web.models.StaticSiteZipDeployment
    """

    properties: Optional["_models.StaticSiteZipDeployment"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Core resource properties."""

    __flattened_items = ["app_zip_url", "api_zip_url", "deployment_title", "provider", "function_language"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StaticSiteZipDeployment"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class Status(_Model):
    """Identify the status of the most severe insight generated by the detector.

    :ivar message: Descriptive message.
    :vartype message: str
    :ivar status_id: Level of the most severe insight generated by the detector. Known values are:
     "Critical", "Warning", "Info", "Success", and "None".
    :vartype status_id: str or ~azure.mgmt.web.models.InsightStatus
    """

    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Descriptive message."""
    status_id: Optional[Union[str, "_models.InsightStatus"]] = rest_field(
        name="statusId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Level of the most severe insight generated by the detector. Known values are: \"Critical\",
     \"Warning\", \"Info\", \"Success\", and \"None\"."""

    @overload
    def __init__(
        self,
        *,
        message: Optional[str] = None,
        status_id: Optional[Union[str, "_models.InsightStatus"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StatusCodesBasedTrigger(_Model):
    """Trigger based on status code.

    :ivar status: HTTP status code.
    :vartype status: int
    :ivar sub_status: Request Sub Status.
    :vartype sub_status: int
    :ivar win32_status: Win32 error code.
    :vartype win32_status: int
    :ivar count: Request Count.
    :vartype count: int
    :ivar time_interval: Time interval.
    :vartype time_interval: str
    :ivar path: Request Path.
    :vartype path: str
    """

    status: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """HTTP status code."""
    sub_status: Optional[int] = rest_field(name="subStatus", visibility=["read", "create", "update", "delete", "query"])
    """Request Sub Status."""
    win32_status: Optional[int] = rest_field(
        name="win32Status", visibility=["read", "create", "update", "delete", "query"]
    )
    """Win32 error code."""
    count: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Request Count."""
    time_interval: Optional[str] = rest_field(
        name="timeInterval", visibility=["read", "create", "update", "delete", "query"]
    )
    """Time interval."""
    path: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Request Path."""

    @overload
    def __init__(
        self,
        *,
        status: Optional[int] = None,
        sub_status: Optional[int] = None,
        win32_status: Optional[int] = None,
        count: Optional[int] = None,
        time_interval: Optional[str] = None,
        path: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StatusCodesRangeBasedTrigger(_Model):
    """Trigger based on range of status codes.

    :ivar status_codes: HTTP status code.
    :vartype status_codes: str
    :ivar path:
    :vartype path: str
    :ivar count: Request Count.
    :vartype count: int
    :ivar time_interval: Time interval.
    :vartype time_interval: str
    """

    status_codes: Optional[str] = rest_field(
        name="statusCodes", visibility=["read", "create", "update", "delete", "query"]
    )
    """HTTP status code."""
    path: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    count: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Request Count."""
    time_interval: Optional[str] = rest_field(
        name="timeInterval", visibility=["read", "create", "update", "delete", "query"]
    )
    """Time interval."""

    @overload
    def __init__(
        self,
        *,
        status_codes: Optional[str] = None,
        path: Optional[str] = None,
        count: Optional[int] = None,
        time_interval: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StorageMigrationOptions(ProxyOnlyResource):
    """Options for app content migration.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: StorageMigrationOptions resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StorageMigrationOptionsProperties
    """

    properties: Optional["_models.StorageMigrationOptionsProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StorageMigrationOptions resource specific properties."""

    __flattened_items = [
        "azurefiles_connection_string",
        "azurefiles_share",
        "switch_site_after_migration",
        "block_write_access_to_site",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StorageMigrationOptionsProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StorageMigrationOptionsProperties(_Model):
    """StorageMigrationOptions resource specific properties.

    :ivar azurefiles_connection_string: AzureFiles connection string. Required.
    :vartype azurefiles_connection_string: str
    :ivar azurefiles_share: AzureFiles share. Required.
    :vartype azurefiles_share: str
    :ivar switch_site_after_migration: <code>true</code>if the app should be switched over;
     otherwise, <code>false</code>.
    :vartype switch_site_after_migration: bool
    :ivar block_write_access_to_site: <code>true</code> if the app should be read only during copy
     operation; otherwise, <code>false</code>.
    :vartype block_write_access_to_site: bool
    """

    azurefiles_connection_string: str = rest_field(name="azurefilesConnectionString", visibility=["create"])
    """AzureFiles connection string. Required."""
    azurefiles_share: str = rest_field(name="azurefilesShare", visibility=["create"])
    """AzureFiles share. Required."""
    switch_site_after_migration: Optional[bool] = rest_field(name="switchSiteAfterMigration", visibility=["create"])
    """<code>true</code>if the app should be switched over; otherwise, <code>false</code>."""
    block_write_access_to_site: Optional[bool] = rest_field(name="blockWriteAccessToSite", visibility=["create"])
    """<code>true</code> if the app should be read only during copy operation; otherwise,
     <code>false</code>."""

    @overload
    def __init__(
        self,
        *,
        azurefiles_connection_string: str,
        azurefiles_share: str,
        switch_site_after_migration: Optional[bool] = None,
        block_write_access_to_site: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StorageMigrationResponse(ProxyOnlyResource):
    """Response for a migration of app content request.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: StorageMigrationResponse resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.StorageMigrationResponseProperties
    """

    properties: Optional["_models.StorageMigrationResponseProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """StorageMigrationResponse resource specific properties."""

    __flattened_items = ["operation_id"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.StorageMigrationResponseProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StorageMigrationResponseProperties(_Model):
    """StorageMigrationResponse resource specific properties.

    :ivar operation_id: When server starts the migration process, it will return an operation ID
     identifying that particular migration operation.
    :vartype operation_id: str
    """

    operation_id: Optional[str] = rest_field(name="operationId", visibility=["read"])
    """When server starts the migration process, it will return an operation ID identifying that
     particular migration operation."""


class StorageMount(_Model):
    """Server farm storage mount configuration.

    :ivar name: Name of the storage mount.
    :vartype name: str
    :ivar type: Type of the storage mount. Known values are: "AzureFiles", "LocalStorage", and
     "FileShare".
    :vartype type: str or ~azure.mgmt.web.models.StorageMountType
    :ivar source: Source of the fileshare/storage.
    :vartype source: str
    :ivar destination_path: Path on worker where storage will be mounted.
    :vartype destination_path: str
    :ivar credentials_key_vault_reference: KV reference to the credentials to connect to the share.
    :vartype credentials_key_vault_reference: ~azure.mgmt.web.models.KeyVaultReferenceWithStatus
    """

    name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Name of the storage mount."""
    type: Optional[Union[str, "_models.StorageMountType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Type of the storage mount. Known values are: \"AzureFiles\", \"LocalStorage\", and
     \"FileShare\"."""
    source: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Source of the fileshare/storage."""
    destination_path: Optional[str] = rest_field(
        name="destinationPath", visibility=["read", "create", "update", "delete", "query"]
    )
    """Path on worker where storage will be mounted."""
    credentials_key_vault_reference: Optional["_models.KeyVaultReferenceWithStatus"] = rest_field(
        name="credentialsKeyVaultReference", visibility=["read", "create", "update", "delete", "query"]
    )
    """KV reference to the credentials to connect to the share."""

    @overload
    def __init__(
        self,
        *,
        name: Optional[str] = None,
        type: Optional[Union[str, "_models.StorageMountType"]] = None,
        source: Optional[str] = None,
        destination_path: Optional[str] = None,
        credentials_key_vault_reference: Optional["_models.KeyVaultReferenceWithStatus"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class StringDictionary(ProxyOnlyResource):
    """String dictionary resource.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: Settings.
    :vartype properties: dict[str, str]
    """

    properties: Optional[dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Settings."""

    __flattened_items = [""]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional[dict[str, str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class StringList(ProxyOnlyResource):
    """String list resource.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: List of string resources.
    :vartype properties: list[str]
    """

    properties: Optional[list[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """List of string resources."""

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SupportTopic(_Model):
    """Defines a unique Support Topic.

    :ivar id: Support Topic Id.
    :vartype id: str
    :ivar pes_id: Unique resource Id.
    :vartype pes_id: str
    """

    id: Optional[str] = rest_field(visibility=["read"])
    """Support Topic Id."""
    pes_id: Optional[str] = rest_field(name="pesId", visibility=["read"])
    """Unique resource Id."""


class SwiftVirtualNetwork(ProxyResource):
    """Swift Virtual Network Contract. This is used to enable the new Swift way of doing virtual
    network integration.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: SwiftVirtualNetwork resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.SwiftVirtualNetworkProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.SwiftVirtualNetworkProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """SwiftVirtualNetwork resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["subnet_resource_id", "swift_supported"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.SwiftVirtualNetworkProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class SwiftVirtualNetworkProperties(_Model):
    """SwiftVirtualNetwork resource specific properties.

    :ivar subnet_resource_id: The Virtual Network subnet's resource ID. This is the subnet that
     this Web App will join. This subnet must have a delegation to Microsoft.Web/serverFarms defined
     first.
    :vartype subnet_resource_id: str
    :ivar swift_supported: A flag that specifies if the scale unit this Web App is on supports
     Swift integration.
    :vartype swift_supported: bool
    """

    subnet_resource_id: Optional[str] = rest_field(
        name="subnetResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The Virtual Network subnet's resource ID. This is the subnet that this Web App will join. This
     subnet must have a delegation to Microsoft.Web/serverFarms defined first."""
    swift_supported: Optional[bool] = rest_field(
        name="swiftSupported", visibility=["read", "create", "update", "delete", "query"]
    )
    """A flag that specifies if the scale unit this Web App is on supports Swift integration."""

    @overload
    def __init__(
        self,
        *,
        subnet_resource_id: Optional[str] = None,
        swift_supported: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class SystemData(_Model):
    """Metadata pertaining to creation and last modification of the resource.

    :ivar created_by: The identity that created the resource.
    :vartype created_by: str
    :ivar created_by_type: The type of identity that created the resource. Known values are:
     "User", "Application", "ManagedIdentity", and "Key".
    :vartype created_by_type: str or ~azure.mgmt.web.models.CreatedByType
    :ivar created_at: The timestamp of resource creation (UTC).
    :vartype created_at: ~datetime.datetime
    :ivar last_modified_by: The identity that last modified the resource.
    :vartype last_modified_by: str
    :ivar last_modified_by_type: The type of identity that last modified the resource. Known values
     are: "User", "Application", "ManagedIdentity", and "Key".
    :vartype last_modified_by_type: str or ~azure.mgmt.web.models.CreatedByType
    :ivar last_modified_at: The timestamp of resource last modification (UTC).
    :vartype last_modified_at: ~datetime.datetime
    """

    created_by: Optional[str] = rest_field(name="createdBy", visibility=["read", "create", "update", "delete", "query"])
    """The identity that created the resource."""
    created_by_type: Optional[Union[str, "_models.CreatedByType"]] = rest_field(
        name="createdByType", visibility=["read", "create", "update", "delete", "query"]
    )
    """The type of identity that created the resource. Known values are: \"User\", \"Application\",
     \"ManagedIdentity\", and \"Key\"."""
    created_at: Optional[datetime.datetime] = rest_field(
        name="createdAt", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The timestamp of resource creation (UTC)."""
    last_modified_by: Optional[str] = rest_field(
        name="lastModifiedBy", visibility=["read", "create", "update", "delete", "query"]
    )
    """The identity that last modified the resource."""
    last_modified_by_type: Optional[Union[str, "_models.CreatedByType"]] = rest_field(
        name="lastModifiedByType", visibility=["read", "create", "update", "delete", "query"]
    )
    """The type of identity that last modified the resource. Known values are: \"User\",
     \"Application\", \"ManagedIdentity\", and \"Key\"."""
    last_modified_at: Optional[datetime.datetime] = rest_field(
        name="lastModifiedAt", visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """The timestamp of resource last modification (UTC)."""

    @overload
    def __init__(
        self,
        *,
        created_by: Optional[str] = None,
        created_by_type: Optional[Union[str, "_models.CreatedByType"]] = None,
        created_at: Optional[datetime.datetime] = None,
        last_modified_by: Optional[str] = None,
        last_modified_by_type: Optional[Union[str, "_models.CreatedByType"]] = None,
        last_modified_at: Optional[datetime.datetime] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class TokenStore(_Model):
    """The configuration settings of the token store.

    :ivar enabled: <code>true</code> to durably store platform-specific security tokens that are
     obtained during login flows; otherwise, <code>false</code>. The default is <code>false</code>.
    :vartype enabled: bool
    :ivar token_refresh_extension_hours: The number of hours after session token expiration that a
     session token can be used to call the token refresh API. The default is 72 hours.
    :vartype token_refresh_extension_hours: float
    :ivar file_system: The configuration settings of the storage of the tokens if a file system is
     used.
    :vartype file_system: ~azure.mgmt.web.models.FileSystemTokenStore
    :ivar azure_blob_storage: The configuration settings of the storage of the tokens if blob
     storage is used.
    :vartype azure_blob_storage: ~azure.mgmt.web.models.BlobStorageTokenStore
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> to durably store platform-specific security tokens that are obtained during
     login flows; otherwise, <code>false</code>. The default is <code>false</code>."""
    token_refresh_extension_hours: Optional[float] = rest_field(
        name="tokenRefreshExtensionHours", visibility=["read", "create", "update", "delete", "query"]
    )
    """The number of hours after session token expiration that a session token can be used to call the
     token refresh API. The default is 72 hours."""
    file_system: Optional["_models.FileSystemTokenStore"] = rest_field(
        name="fileSystem", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the storage of the tokens if a file system is used."""
    azure_blob_storage: Optional["_models.BlobStorageTokenStore"] = rest_field(
        name="azureBlobStorage", visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the storage of the tokens if blob storage is used."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        token_refresh_extension_hours: Optional[float] = None,
        file_system: Optional["_models.FileSystemTokenStore"] = None,
        azure_blob_storage: Optional["_models.BlobStorageTokenStore"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class TriggeredJobHistory(ProxyResource):
    """Triggered Web Job History. List of Triggered Web Job Run Information elements.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: TriggeredJobHistory resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.TriggeredJobHistoryProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.TriggeredJobHistoryProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """TriggeredJobHistory resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["runs"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.TriggeredJobHistoryProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class TriggeredJobHistoryProperties(_Model):
    """TriggeredJobHistory resource specific properties.

    :ivar runs: List of triggered web job runs.
    :vartype runs: list[~azure.mgmt.web.models.TriggeredJobRun]
    """

    runs: Optional[list["_models.TriggeredJobRun"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """List of triggered web job runs."""

    @overload
    def __init__(
        self,
        *,
        runs: Optional[list["_models.TriggeredJobRun"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class TriggeredJobRun(_Model):
    """Triggered Web Job Run Information.

    :ivar web_job_id: Job ID.
    :vartype web_job_id: str
    :ivar web_job_name: Job name.
    :vartype web_job_name: str
    :ivar status: Job status. Known values are: "Success", "Failed", "Error", "Aborted", and
     "Running".
    :vartype status: str or ~azure.mgmt.web.models.TriggeredWebJobStatus
    :ivar start_time: Start time.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: End time.
    :vartype end_time: ~datetime.datetime
    :ivar duration: Job duration.
    :vartype duration: str
    :ivar output_url: Output URL.
    :vartype output_url: str
    :ivar error_url: Error URL.
    :vartype error_url: str
    :ivar url: Job URL.
    :vartype url: str
    :ivar job_name: Job name.
    :vartype job_name: str
    :ivar trigger: Job trigger.
    :vartype trigger: str
    """

    web_job_id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Job ID."""
    web_job_name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Job name."""
    status: Optional[Union[str, "_models.TriggeredWebJobStatus"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Job status. Known values are: \"Success\", \"Failed\", \"Error\", \"Aborted\", and \"Running\"."""
    start_time: Optional[datetime.datetime] = rest_field(
        visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """Start time."""
    end_time: Optional[datetime.datetime] = rest_field(
        visibility=["read", "create", "update", "delete", "query"], format="rfc3339"
    )
    """End time."""
    duration: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Job duration."""
    output_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Output URL."""
    error_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Error URL."""
    url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Job URL."""
    job_name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Job name."""
    trigger: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Job trigger."""

    @overload
    def __init__(
        self,
        *,
        web_job_id: Optional[str] = None,
        web_job_name: Optional[str] = None,
        status: Optional[Union[str, "_models.TriggeredWebJobStatus"]] = None,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        duration: Optional[str] = None,
        output_url: Optional[str] = None,
        error_url: Optional[str] = None,
        url: Optional[str] = None,
        job_name: Optional[str] = None,
        trigger: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class TriggeredWebJob(ProxyResource):
    """Triggered Web Job Information.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: TriggeredWebJob resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.TriggeredWebJobProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.TriggeredWebJobProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """TriggeredWebJob resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "latest_run",
        "history_url",
        "scheduler_logs_url",
        "run_command",
        "url",
        "extra_info_url",
        "web_job_type",
        "error",
        "using_sdk",
        "public_network_access",
        "storage_account_required",
        "settings",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.TriggeredWebJobProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class TriggeredWebJobProperties(_Model):
    """TriggeredWebJob resource specific properties.

    :ivar latest_run: Latest job run information.
    :vartype latest_run: ~azure.mgmt.web.models.TriggeredJobRun
    :ivar history_url: History URL.
    :vartype history_url: str
    :ivar scheduler_logs_url: Scheduler Logs URL.
    :vartype scheduler_logs_url: str
    :ivar run_command: Run command.
    :vartype run_command: str
    :ivar url: Job URL.
    :vartype url: str
    :ivar extra_info_url: Extra Info URL.
    :vartype extra_info_url: str
    :ivar web_job_type: Job type. Known values are: "Continuous" and "Triggered".
    :vartype web_job_type: str or ~azure.mgmt.web.models.WebJobType
    :ivar error: Error information.
    :vartype error: str
    :ivar using_sdk: Using SDK?.
    :vartype using_sdk: bool
    :ivar public_network_access: Property to allow or block all public traffic. Allowed Values:
     'Enabled', 'Disabled' or an empty string.
    :vartype public_network_access: str
    :ivar storage_account_required: Checks if Customer provided storage account is required.
    :vartype storage_account_required: bool
    :ivar settings: Job settings.
    :vartype settings: dict[str, any]
    """

    latest_run: Optional["_models.TriggeredJobRun"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Latest job run information."""
    history_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """History URL."""
    scheduler_logs_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Scheduler Logs URL."""
    run_command: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Run command."""
    url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Job URL."""
    extra_info_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Extra Info URL."""
    web_job_type: Optional[Union[str, "_models.WebJobType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Job type. Known values are: \"Continuous\" and \"Triggered\"."""
    error: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Error information."""
    using_sdk: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Using SDK?."""
    public_network_access: Optional[str] = rest_field(
        name="publicNetworkAccess", visibility=["read", "create", "update", "delete", "query"]
    )
    """Property to allow or block all public traffic. Allowed Values: 'Enabled', 'Disabled' or an
     empty string."""
    storage_account_required: Optional[bool] = rest_field(
        name="storageAccountRequired", visibility=["read", "create", "update", "delete", "query"]
    )
    """Checks if Customer provided storage account is required."""
    settings: Optional[dict[str, Any]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Job settings."""

    @overload
    def __init__(
        self,
        *,
        latest_run: Optional["_models.TriggeredJobRun"] = None,
        history_url: Optional[str] = None,
        scheduler_logs_url: Optional[str] = None,
        run_command: Optional[str] = None,
        url: Optional[str] = None,
        extra_info_url: Optional[str] = None,
        web_job_type: Optional[Union[str, "_models.WebJobType"]] = None,
        error: Optional[str] = None,
        using_sdk: Optional[bool] = None,
        public_network_access: Optional[str] = None,
        storage_account_required: Optional[bool] = None,
        settings: Optional[dict[str, Any]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Twitter(_Model):
    """The configuration settings of the Twitter provider.

    :ivar enabled: <code>false</code> if the Twitter provider should not be enabled despite the set
     registration; otherwise, <code>true</code>.
    :vartype enabled: bool
    :ivar registration: The configuration settings of the app registration for the Twitter
     provider.
    :vartype registration: ~azure.mgmt.web.models.TwitterRegistration
    """

    enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """<code>false</code> if the Twitter provider should not be enabled despite the set registration;
     otherwise, <code>true</code>."""
    registration: Optional["_models.TwitterRegistration"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The configuration settings of the app registration for the Twitter provider."""

    @overload
    def __init__(
        self,
        *,
        enabled: Optional[bool] = None,
        registration: Optional["_models.TwitterRegistration"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class TwitterRegistration(_Model):
    """The configuration settings of the app registration for the Twitter provider.

    :ivar consumer_key: The OAuth 1.0a consumer key of the Twitter application used for sign-in.
     This setting is required for enabling Twitter Sign-In. Twitter Sign-In documentation:
     `https://dev.twitter.com/web/sign-in <https://dev.twitter.com/web/sign-in>`_.
    :vartype consumer_key: str
    :ivar consumer_secret_setting_name: The app setting name that contains the OAuth 1.0a consumer
     secret of the Twitter application used for sign-in.
    :vartype consumer_secret_setting_name: str
    """

    consumer_key: Optional[str] = rest_field(
        name="consumerKey", visibility=["read", "create", "update", "delete", "query"]
    )
    """The OAuth 1.0a consumer key of the Twitter application used for sign-in. This setting is
     required for enabling Twitter Sign-In. Twitter Sign-In documentation:
     `https://dev.twitter.com/web/sign-in <https://dev.twitter.com/web/sign-in>`_."""
    consumer_secret_setting_name: Optional[str] = rest_field(
        name="consumerSecretSettingName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application
     used for sign-in."""

    @overload
    def __init__(
        self,
        *,
        consumer_key: Optional[str] = None,
        consumer_secret_setting_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Usage(ProxyOnlyResource):
    """Usage of the quota resource.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: Usage resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.UsageProperties
    """

    properties: Optional["_models.UsageProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Usage resource specific properties."""

    __flattened_items = [
        "display_name",
        "resource_name",
        "unit",
        "current_value",
        "limit",
        "next_reset_time",
        "compute_mode",
        "site_mode",
    ]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.UsageProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class UsageProperties(_Model):
    """Usage resource specific properties.

    :ivar display_name: Friendly name shown in the UI.
    :vartype display_name: str
    :ivar resource_name: Name of the quota resource.
    :vartype resource_name: str
    :ivar unit: Units of measurement for the quota resource.
    :vartype unit: str
    :ivar current_value: The current value of the resource counter.
    :vartype current_value: int
    :ivar limit: The resource limit.
    :vartype limit: int
    :ivar next_reset_time: Next reset time for the resource counter.
    :vartype next_reset_time: ~datetime.datetime
    :ivar compute_mode: Compute mode used for this usage. Known values are: "Shared", "Dedicated",
     and "Dynamic".
    :vartype compute_mode: str or ~azure.mgmt.web.models.ComputeModeOptions
    :ivar site_mode: Site mode used for this usage.
    :vartype site_mode: str
    """

    display_name: Optional[str] = rest_field(name="displayName", visibility=["read"])
    """Friendly name shown in the UI."""
    resource_name: Optional[str] = rest_field(name="resourceName", visibility=["read"])
    """Name of the quota resource."""
    unit: Optional[str] = rest_field(visibility=["read"])
    """Units of measurement for the quota resource."""
    current_value: Optional[int] = rest_field(name="currentValue", visibility=["read"])
    """The current value of the resource counter."""
    limit: Optional[int] = rest_field(visibility=["read"])
    """The resource limit."""
    next_reset_time: Optional[datetime.datetime] = rest_field(
        name="nextResetTime", visibility=["read"], format="rfc3339"
    )
    """Next reset time for the resource counter."""
    compute_mode: Optional[Union[str, "_models.ComputeModeOptions"]] = rest_field(
        name="computeMode", visibility=["read"]
    )
    """Compute mode used for this usage. Known values are: \"Shared\", \"Dedicated\", and \"Dynamic\"."""
    site_mode: Optional[str] = rest_field(name="siteMode", visibility=["read"])
    """Site mode used for this usage."""


class User(ProxyResource):
    """User credentials used for publishing activity.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: User resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.UserProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.UserProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """User resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "publishing_user_name",
        "publishing_password",
        "publishing_password_hash",
        "publishing_password_hash_salt",
        "scm_uri",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.UserProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class UserAssignedIdentity(_Model):
    """User Assigned identity.

    :ivar principal_id: Principal Id of user assigned identity.
    :vartype principal_id: str
    :ivar client_id: Client Id of user assigned identity.
    :vartype client_id: str
    """

    principal_id: Optional[str] = rest_field(name="principalId", visibility=["read"])
    """Principal Id of user assigned identity."""
    client_id: Optional[str] = rest_field(name="clientId", visibility=["read"])
    """Client Id of user assigned identity."""


class UserProperties(_Model):
    """User resource specific properties.

    :ivar publishing_user_name: Username used for publishing. Required.
    :vartype publishing_user_name: str
    :ivar publishing_password: Password used for publishing.
    :vartype publishing_password: str
    :ivar publishing_password_hash: Password hash used for publishing.
    :vartype publishing_password_hash: str
    :ivar publishing_password_hash_salt: Password hash salt used for publishing.
    :vartype publishing_password_hash_salt: str
    :ivar scm_uri: Url of SCM site.
    :vartype scm_uri: str
    """

    publishing_user_name: str = rest_field(
        name="publishingUserName", visibility=["read", "create", "update", "delete", "query"]
    )
    """Username used for publishing. Required."""
    publishing_password: Optional[str] = rest_field(
        name="publishingPassword", visibility=["read", "create", "update", "delete", "query"]
    )
    """Password used for publishing."""
    publishing_password_hash: Optional[str] = rest_field(
        name="publishingPasswordHash", visibility=["read", "create", "update", "delete", "query"]
    )
    """Password hash used for publishing."""
    publishing_password_hash_salt: Optional[str] = rest_field(
        name="publishingPasswordHashSalt", visibility=["read", "create", "update", "delete", "query"]
    )
    """Password hash salt used for publishing."""
    scm_uri: Optional[str] = rest_field(name="scmUri", visibility=["read", "create", "update", "delete", "query"])
    """Url of SCM site."""

    @overload
    def __init__(
        self,
        *,
        publishing_user_name: str,
        publishing_password: Optional[str] = None,
        publishing_password_hash: Optional[str] = None,
        publishing_password_hash_salt: Optional[str] = None,
        scm_uri: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ValidateProperties(_Model):
    """App properties used for validation.

    :ivar server_farm_id: ARM resource ID of an App Service plan that would host the app.
    :vartype server_farm_id: str
    :ivar sku_name: Name of the target SKU for the App Service plan.
    :vartype sku_name: str
    :ivar need_linux_workers: <code>true</code> if App Service plan is for Linux workers;
     otherwise, <code>false</code>.
    :vartype need_linux_workers: bool
    :ivar is_spot: <code>true</code> if App Service plan is for Spot instances; otherwise,
     <code>false</code>.
    :vartype is_spot: bool
    :ivar capacity: Target capacity of the App Service plan (number of VMs).
    :vartype capacity: int
    :ivar hosting_environment: Name of App Service Environment where app or App Service plan should
     be created.
    :vartype hosting_environment: str
    :ivar is_xenon: <code>true</code> if App Service plan is running as a windows container.
    :vartype is_xenon: bool
    :ivar container_registry_base_url: Base URL of the container registry.
    :vartype container_registry_base_url: str
    :ivar container_registry_username: Username for to access the container registry.
    :vartype container_registry_username: str
    :ivar container_registry_password: Password for to access the container registry.
    :vartype container_registry_password: str
    :ivar container_image_repository: Repository name (image name).
    :vartype container_image_repository: str
    :ivar container_image_tag: Image tag.
    :vartype container_image_tag: str
    :ivar container_image_platform: Platform (windows or linux).
    :vartype container_image_platform: str
    :ivar app_service_environment: App Service Environment Properties.
    :vartype app_service_environment: ~azure.mgmt.web.models.AppServiceEnvironment
    """

    server_farm_id: Optional[str] = rest_field(
        name="serverFarmId", visibility=["read", "create", "update", "delete", "query"]
    )
    """ARM resource ID of an App Service plan that would host the app."""
    sku_name: Optional[str] = rest_field(name="skuName", visibility=["read", "create", "update", "delete", "query"])
    """Name of the target SKU for the App Service plan."""
    need_linux_workers: Optional[bool] = rest_field(
        name="needLinuxWorkers", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if App Service plan is for Linux workers; otherwise, <code>false</code>."""
    is_spot: Optional[bool] = rest_field(name="isSpot", visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> if App Service plan is for Spot instances; otherwise, <code>false</code>."""
    capacity: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Target capacity of the App Service plan (number of VMs)."""
    hosting_environment: Optional[str] = rest_field(
        name="hostingEnvironment", visibility=["read", "create", "update", "delete", "query"]
    )
    """Name of App Service Environment where app or App Service plan should be created."""
    is_xenon: Optional[bool] = rest_field(name="isXenon", visibility=["read", "create", "update", "delete", "query"])
    """<code>true</code> if App Service plan is running as a windows container."""
    container_registry_base_url: Optional[str] = rest_field(
        name="containerRegistryBaseUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """Base URL of the container registry."""
    container_registry_username: Optional[str] = rest_field(
        name="containerRegistryUsername", visibility=["read", "create", "update", "delete", "query"]
    )
    """Username for to access the container registry."""
    container_registry_password: Optional[str] = rest_field(
        name="containerRegistryPassword", visibility=["read", "create", "update", "delete", "query"]
    )
    """Password for to access the container registry."""
    container_image_repository: Optional[str] = rest_field(
        name="containerImageRepository", visibility=["read", "create", "update", "delete", "query"]
    )
    """Repository name (image name)."""
    container_image_tag: Optional[str] = rest_field(
        name="containerImageTag", visibility=["read", "create", "update", "delete", "query"]
    )
    """Image tag."""
    container_image_platform: Optional[str] = rest_field(
        name="containerImagePlatform", visibility=["read", "create", "update", "delete", "query"]
    )
    """Platform (windows or linux)."""
    app_service_environment: Optional["_models.AppServiceEnvironment"] = rest_field(
        name="appServiceEnvironment", visibility=["read", "create", "update", "delete", "query"]
    )
    """App Service Environment Properties."""

    @overload
    def __init__(
        self,
        *,
        server_farm_id: Optional[str] = None,
        sku_name: Optional[str] = None,
        need_linux_workers: Optional[bool] = None,
        is_spot: Optional[bool] = None,
        capacity: Optional[int] = None,
        hosting_environment: Optional[str] = None,
        is_xenon: Optional[bool] = None,
        container_registry_base_url: Optional[str] = None,
        container_registry_username: Optional[str] = None,
        container_registry_password: Optional[str] = None,
        container_image_repository: Optional[str] = None,
        container_image_tag: Optional[str] = None,
        container_image_platform: Optional[str] = None,
        app_service_environment: Optional["_models.AppServiceEnvironment"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ValidateRequest(_Model):
    """Resource validation request content.

    :ivar name: Resource name to verify. Required.
    :vartype name: str
    :ivar type: Resource type used for verification. Required. Known values are: "ServerFarm",
     "Site", and "Microsoft.Web/hostingEnvironments".
    :vartype type: str or ~azure.mgmt.web.models.ValidateResourceTypes
    :ivar location: Expected location of the resource. Required.
    :vartype location: str
    :ivar properties: Properties of the resource to validate. Required.
    :vartype properties: ~azure.mgmt.web.models.ValidateProperties
    """

    name: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Resource name to verify. Required."""
    type: Union[str, "_models.ValidateResourceTypes"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Resource type used for verification. Required. Known values are: \"ServerFarm\", \"Site\", and
     \"Microsoft.Web/hostingEnvironments\"."""
    location: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Expected location of the resource. Required."""
    properties: "_models.ValidateProperties" = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Properties of the resource to validate. Required."""

    __flattened_items = [
        "server_farm_id",
        "sku_name",
        "need_linux_workers",
        "is_spot",
        "capacity",
        "hosting_environment",
        "is_xenon",
        "container_registry_base_url",
        "container_registry_username",
        "container_registry_password",
        "container_image_repository",
        "container_image_tag",
        "container_image_platform",
        "app_service_environment",
    ]

    @overload
    def __init__(
        self,
        *,
        name: str,
        type: Union[str, "_models.ValidateResourceTypes"],
        location: str,
        properties: "_models.ValidateProperties",
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class ValidateResponse(_Model):
    """Describes the result of resource validation.

    :ivar status: Result of validation.
    :vartype status: str
    :ivar error: Error details for the case when validation fails.
    :vartype error: ~azure.mgmt.web.models.ValidateResponseError
    """

    status: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Result of validation."""
    error: Optional["_models.ValidateResponseError"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Error details for the case when validation fails."""

    @overload
    def __init__(
        self,
        *,
        status: Optional[str] = None,
        error: Optional["_models.ValidateResponseError"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class ValidateResponseError(_Model):
    """Error details for when validation fails.

    :ivar code: Validation error code.
    :vartype code: str
    :ivar message: Validation error message.
    :vartype message: str
    """

    code: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Validation error code."""
    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Validation error message."""

    @overload
    def __init__(
        self,
        *,
        code: Optional[str] = None,
        message: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class VirtualApplication(_Model):
    """Virtual application in an app.

    :ivar virtual_path: Virtual path.
    :vartype virtual_path: str
    :ivar physical_path: Physical path.
    :vartype physical_path: str
    :ivar preload_enabled: <code>true</code> if preloading is enabled; otherwise,
     <code>false</code>.
    :vartype preload_enabled: bool
    :ivar virtual_directories: Virtual directories for virtual application.
    :vartype virtual_directories: list[~azure.mgmt.web.models.VirtualDirectory]
    """

    virtual_path: Optional[str] = rest_field(
        name="virtualPath", visibility=["read", "create", "update", "delete", "query"]
    )
    """Virtual path."""
    physical_path: Optional[str] = rest_field(
        name="physicalPath", visibility=["read", "create", "update", "delete", "query"]
    )
    """Physical path."""
    preload_enabled: Optional[bool] = rest_field(
        name="preloadEnabled", visibility=["read", "create", "update", "delete", "query"]
    )
    """<code>true</code> if preloading is enabled; otherwise, <code>false</code>."""
    virtual_directories: Optional[list["_models.VirtualDirectory"]] = rest_field(
        name="virtualDirectories", visibility=["read", "create", "update", "delete", "query"]
    )
    """Virtual directories for virtual application."""

    @overload
    def __init__(
        self,
        *,
        virtual_path: Optional[str] = None,
        physical_path: Optional[str] = None,
        preload_enabled: Optional[bool] = None,
        virtual_directories: Optional[list["_models.VirtualDirectory"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class VirtualDirectory(_Model):
    """Directory for virtual application.

    :ivar virtual_path: Path to virtual application.
    :vartype virtual_path: str
    :ivar physical_path: Physical path.
    :vartype physical_path: str
    """

    virtual_path: Optional[str] = rest_field(
        name="virtualPath", visibility=["read", "create", "update", "delete", "query"]
    )
    """Path to virtual application."""
    physical_path: Optional[str] = rest_field(
        name="physicalPath", visibility=["read", "create", "update", "delete", "query"]
    )
    """Physical path."""

    @overload
    def __init__(
        self,
        *,
        virtual_path: Optional[str] = None,
        physical_path: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class VirtualIPMapping(_Model):
    """Virtual IP mapping.

    :ivar virtual_ip: Virtual IP address.
    :vartype virtual_ip: str
    :ivar internal_http_port: Internal HTTP port.
    :vartype internal_http_port: int
    :ivar internal_https_port: Internal HTTPS port.
    :vartype internal_https_port: int
    :ivar in_use: Is virtual IP mapping in use.
    :vartype in_use: bool
    :ivar service_name: name of the service that virtual IP is assigned to.
    :vartype service_name: str
    """

    virtual_ip: Optional[str] = rest_field(name="virtualIP", visibility=["read", "create", "update", "delete", "query"])
    """Virtual IP address."""
    internal_http_port: Optional[int] = rest_field(
        name="internalHttpPort", visibility=["read", "create", "update", "delete", "query"]
    )
    """Internal HTTP port."""
    internal_https_port: Optional[int] = rest_field(
        name="internalHttpsPort", visibility=["read", "create", "update", "delete", "query"]
    )
    """Internal HTTPS port."""
    in_use: Optional[bool] = rest_field(name="inUse", visibility=["read", "create", "update", "delete", "query"])
    """Is virtual IP mapping in use."""
    service_name: Optional[str] = rest_field(
        name="serviceName", visibility=["read", "create", "update", "delete", "query"]
    )
    """name of the service that virtual IP is assigned to."""

    @overload
    def __init__(
        self,
        *,
        virtual_ip: Optional[str] = None,
        internal_http_port: Optional[int] = None,
        internal_https_port: Optional[int] = None,
        in_use: Optional[bool] = None,
        service_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class VirtualNetworkProfile(_Model):
    """Specification for using a Virtual Network.

    :ivar id: Resource id of the Virtual Network. Required.
    :vartype id: str
    :ivar name: Name of the Virtual Network (read-only).
    :vartype name: str
    :ivar type: Resource type of the Virtual Network (read-only).
    :vartype type: str
    :ivar subnet: Subnet within the Virtual Network.
    :vartype subnet: str
    """

    id: str = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Resource id of the Virtual Network. Required."""
    name: Optional[str] = rest_field(visibility=["read"])
    """Name of the Virtual Network (read-only)."""
    type: Optional[str] = rest_field(visibility=["read"])
    """Resource type of the Virtual Network (read-only)."""
    subnet: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Subnet within the Virtual Network."""

    @overload
    def __init__(
        self,
        *,
        id: str,  # pylint: disable=redefined-builtin
        subnet: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class VnetGateway(ProxyResource):
    """The Virtual Network gateway contract. This is used to give the Virtual Network gateway access
    to the VPN package.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: VnetGateway resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.VnetGatewayProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.VnetGatewayProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """VnetGateway resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["vnet_name", "vpn_package_uri"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.VnetGatewayProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class VnetGatewayProperties(_Model):
    """VnetGateway resource specific properties.

    :ivar vnet_name: The Virtual Network name.
    :vartype vnet_name: str
    :ivar vpn_package_uri: The URI where the VPN package can be downloaded. Required.
    :vartype vpn_package_uri: str
    """

    vnet_name: Optional[str] = rest_field(name="vnetName", visibility=["read", "create"])
    """The Virtual Network name."""
    vpn_package_uri: str = rest_field(name="vpnPackageUri", visibility=["create", "update"])
    """The URI where the VPN package can be downloaded. Required."""

    @overload
    def __init__(
        self,
        *,
        vpn_package_uri: str,
        vnet_name: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class VnetInfo(_Model):
    """Virtual Network information contract.

    :ivar vnet_resource_id: The Virtual Network's resource ID.
    :vartype vnet_resource_id: str
    :ivar cert_thumbprint: The client certificate thumbprint.
    :vartype cert_thumbprint: str
    :ivar cert_blob: A certificate file (.cer) blob containing the public key of the private key
     used to authenticate a \\nPoint-To-Site VPN connection.
    :vartype cert_blob: str
    :ivar routes: The routes that this Virtual Network connection uses.
    :vartype routes: list[~azure.mgmt.web.models.VnetRoute]
    :ivar resync_required: <code>true</code> if a resync is required; otherwise,
     <code>false</code>.
    :vartype resync_required: bool
    :ivar dns_servers: DNS servers to be used by this Virtual Network. This should be a
     comma-separated list of IP addresses.
    :vartype dns_servers: str
    :ivar is_swift: Flag that is used to denote if this is VNET injection.
    :vartype is_swift: bool
    """

    vnet_resource_id: Optional[str] = rest_field(
        name="vnetResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The Virtual Network's resource ID."""
    cert_thumbprint: Optional[str] = rest_field(name="certThumbprint", visibility=["read"])
    """The client certificate thumbprint."""
    cert_blob: Optional[str] = rest_field(name="certBlob", visibility=["read", "create", "update", "delete", "query"])
    """A certificate file (.cer) blob containing the public key of the private key used to
     authenticate a \nPoint-To-Site VPN connection."""
    routes: Optional[list["_models.VnetRoute"]] = rest_field(visibility=["read"])
    """The routes that this Virtual Network connection uses."""
    resync_required: Optional[bool] = rest_field(name="resyncRequired", visibility=["read"])
    """<code>true</code> if a resync is required; otherwise, <code>false</code>."""
    dns_servers: Optional[str] = rest_field(
        name="dnsServers", visibility=["read", "create", "update", "delete", "query"]
    )
    """DNS servers to be used by this Virtual Network. This should be a comma-separated list of IP
     addresses."""
    is_swift: Optional[bool] = rest_field(name="isSwift", visibility=["read", "create", "update", "delete", "query"])
    """Flag that is used to denote if this is VNET injection."""

    @overload
    def __init__(
        self,
        *,
        vnet_resource_id: Optional[str] = None,
        cert_blob: Optional[str] = None,
        dns_servers: Optional[str] = None,
        is_swift: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class VnetInfoResource(ProxyResource):
    """Virtual Network information ARM resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: Core resource properties.
    :vartype properties: ~azure.mgmt.web.models.VnetInfo
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.VnetInfo"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Core resource properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "vnet_resource_id",
        "cert_thumbprint",
        "cert_blob",
        "routes",
        "resync_required",
        "dns_servers",
        "is_swift",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.VnetInfo"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class VnetParameters(ProxyOnlyResource):
    """The required set of inputs to validate a VNET.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: VnetParameters resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.VnetParametersProperties
    """

    properties: Optional["_models.VnetParametersProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """VnetParameters resource specific properties."""

    __flattened_items = ["vnet_resource_group", "vnet_name", "vnet_subnet_name", "subnet_resource_id"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.VnetParametersProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class VnetParametersProperties(_Model):
    """VnetParameters resource specific properties.

    :ivar vnet_resource_group: The Resource Group of the VNET to be validated.
    :vartype vnet_resource_group: str
    :ivar vnet_name: The name of the VNET to be validated.
    :vartype vnet_name: str
    :ivar vnet_subnet_name: The subnet name to be validated.
    :vartype vnet_subnet_name: str
    :ivar subnet_resource_id: The ARM Resource ID of the subnet to validate.
    :vartype subnet_resource_id: str
    """

    vnet_resource_group: Optional[str] = rest_field(
        name="vnetResourceGroup", visibility=["read", "create", "update", "delete", "query"]
    )
    """The Resource Group of the VNET to be validated."""
    vnet_name: Optional[str] = rest_field(name="vnetName", visibility=["read", "create", "update", "delete", "query"])
    """The name of the VNET to be validated."""
    vnet_subnet_name: Optional[str] = rest_field(
        name="vnetSubnetName", visibility=["read", "create", "update", "delete", "query"]
    )
    """The subnet name to be validated."""
    subnet_resource_id: Optional[str] = rest_field(
        name="subnetResourceId", visibility=["read", "create", "update", "delete", "query"]
    )
    """The ARM Resource ID of the subnet to validate."""

    @overload
    def __init__(
        self,
        *,
        vnet_resource_group: Optional[str] = None,
        vnet_name: Optional[str] = None,
        vnet_subnet_name: Optional[str] = None,
        subnet_resource_id: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class VnetRoute(ProxyResource):
    """Virtual Network route contract used to pass routing information for a Virtual Network.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: VnetRoute resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.VnetRouteProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.VnetRouteProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """VnetRoute resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["start_address", "end_address", "route_type"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.VnetRouteProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class VnetRouteProperties(_Model):
    """VnetRoute resource specific properties.

    :ivar start_address: The starting address for this route. This may also include a CIDR
     notation, in which case the end address must not be specified.
    :vartype start_address: str
    :ivar end_address: The ending address for this route. If the start address is specified in CIDR
     notation, this must be omitted.
    :vartype end_address: str
    :ivar route_type: The type of route this is:
     DEFAULT - By default, every app has routes to the local address ranges specified by RFC1918
     INHERITED - Routes inherited from the real Virtual Network routes
     STATIC - Static route set on the app only

     These values will be used for syncing an app's routes with those from a Virtual Network. Known
     values are: "DEFAULT", "INHERITED", and "STATIC".
    :vartype route_type: str or ~azure.mgmt.web.models.RouteType
    """

    start_address: Optional[str] = rest_field(
        name="startAddress", visibility=["read", "create", "update", "delete", "query"]
    )
    """The starting address for this route. This may also include a CIDR notation, in which case the
     end address must not be specified."""
    end_address: Optional[str] = rest_field(
        name="endAddress", visibility=["read", "create", "update", "delete", "query"]
    )
    """The ending address for this route. If the start address is specified in CIDR notation, this
     must be omitted."""
    route_type: Optional[Union[str, "_models.RouteType"]] = rest_field(
        name="routeType", visibility=["read", "create", "update", "delete", "query"]
    )
    """The type of route this is:
     DEFAULT - By default, every app has routes to the local address ranges specified by RFC1918
     INHERITED - Routes inherited from the real Virtual Network routes
     STATIC - Static route set on the app only
     
     These values will be used for syncing an app's routes with those from a Virtual Network. Known
     values are: \"DEFAULT\", \"INHERITED\", and \"STATIC\"."""

    @overload
    def __init__(
        self,
        *,
        start_address: Optional[str] = None,
        end_address: Optional[str] = None,
        route_type: Optional[Union[str, "_models.RouteType"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class VnetValidationFailureDetails(ProxyOnlyResource):
    """A class that describes the reason for a validation failure.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: VnetValidationFailureDetails resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.VnetValidationFailureDetailsProperties
    """

    properties: Optional["_models.VnetValidationFailureDetailsProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """VnetValidationFailureDetails resource specific properties."""

    __flattened_items = ["message", "failed", "failed_tests", "warnings"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.VnetValidationFailureDetailsProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class VnetValidationFailureDetailsProperties(_Model):
    """VnetValidationFailureDetails resource specific properties.

    :ivar message: Text describing the validation outcome.
    :vartype message: str
    :ivar failed: A flag describing whether or not validation failed.
    :vartype failed: bool
    :ivar failed_tests: A list of tests that failed in the validation.
    :vartype failed_tests: list[~azure.mgmt.web.models.VnetValidationTestFailure]
    :ivar warnings: A list of warnings generated during validation.
    :vartype warnings: list[~azure.mgmt.web.models.VnetValidationTestFailure]
    """

    message: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Text describing the validation outcome."""
    failed: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """A flag describing whether or not validation failed."""
    failed_tests: Optional[list["_models.VnetValidationTestFailure"]] = rest_field(
        name="failedTests", visibility=["read", "create", "update", "delete", "query"]
    )
    """A list of tests that failed in the validation."""
    warnings: Optional[list["_models.VnetValidationTestFailure"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """A list of warnings generated during validation."""

    @overload
    def __init__(
        self,
        *,
        message: Optional[str] = None,
        failed: Optional[bool] = None,
        failed_tests: Optional[list["_models.VnetValidationTestFailure"]] = None,
        warnings: Optional[list["_models.VnetValidationTestFailure"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class VnetValidationTestFailure(ProxyOnlyResource):
    """A class that describes a test that failed during NSG and UDR validation.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar properties: VnetValidationTestFailure resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.VnetValidationTestFailureProperties
    """

    properties: Optional["_models.VnetValidationTestFailureProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """VnetValidationTestFailure resource specific properties."""

    __flattened_items = ["test_name", "details"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.VnetValidationTestFailureProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class VnetValidationTestFailureProperties(_Model):
    """VnetValidationTestFailure resource specific properties.

    :ivar test_name: The name of the test that failed.
    :vartype test_name: str
    :ivar details: The details of what caused the failure, e.g. the blocking rule name, etc.
    :vartype details: str
    """

    test_name: Optional[str] = rest_field(name="testName", visibility=["read", "create", "update", "delete", "query"])
    """The name of the test that failed."""
    details: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The details of what caused the failure, e.g. the blocking rule name, etc."""

    @overload
    def __init__(
        self,
        *,
        test_name: Optional[str] = None,
        details: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class VolumeMount(_Model):
    """VolumeMount.

    :ivar volume_sub_path: Sub path in the volume where volume is mounted from. Required.
    :vartype volume_sub_path: str
    :ivar container_mount_path: Target path on the container where volume is mounted on. Required.
    :vartype container_mount_path: str
    :ivar data: Config Data to be mounted on the volume.
    :vartype data: str
    :ivar read_only: Boolean to specify if the mount is read only on the container.
    :vartype read_only: bool
    """

    volume_sub_path: str = rest_field(name="volumeSubPath", visibility=["read", "create", "update", "delete", "query"])
    """Sub path in the volume where volume is mounted from. Required."""
    container_mount_path: str = rest_field(
        name="containerMountPath", visibility=["read", "create", "update", "delete", "query"]
    )
    """Target path on the container where volume is mounted on. Required."""
    data: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Config Data to be mounted on the volume."""
    read_only: Optional[bool] = rest_field(name="readOnly", visibility=["read", "create", "update", "delete", "query"])
    """Boolean to specify if the mount is read only on the container."""

    @overload
    def __init__(
        self,
        *,
        volume_sub_path: str,
        container_mount_path: str,
        data: Optional[str] = None,
        read_only: Optional[bool] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WebAppMajorVersion(_Model):
    """Web App stack major version.

    :ivar display_text: Web App stack major version (display only).
    :vartype display_text: str
    :ivar value: Web App stack major version name.
    :vartype value: str
    :ivar minor_versions: Minor versions associated with the major version.
    :vartype minor_versions: list[~azure.mgmt.web.models.WebAppMinorVersion]
    """

    display_text: Optional[str] = rest_field(name="displayText", visibility=["read"])
    """Web App stack major version (display only)."""
    value: Optional[str] = rest_field(visibility=["read"])
    """Web App stack major version name."""
    minor_versions: Optional[list["_models.WebAppMinorVersion"]] = rest_field(name="minorVersions", visibility=["read"])
    """Minor versions associated with the major version."""


class WebAppMinorVersion(_Model):
    """Web App stack minor version.

    :ivar display_text: Web App stack minor version (display only).
    :vartype display_text: str
    :ivar value: Web App stack major version name.
    :vartype value: str
    :ivar stack_settings: Settings associated with the minor version.
    :vartype stack_settings: ~azure.mgmt.web.models.WebAppRuntimes
    """

    display_text: Optional[str] = rest_field(name="displayText", visibility=["read"])
    """Web App stack minor version (display only)."""
    value: Optional[str] = rest_field(visibility=["read"])
    """Web App stack major version name."""
    stack_settings: Optional["_models.WebAppRuntimes"] = rest_field(name="stackSettings", visibility=["read"])
    """Settings associated with the minor version."""


class WebAppRuntimes(_Model):
    """Web App stack runtimes.

    :ivar linux_runtime_settings: Linux-specific settings associated with the minor version.
    :vartype linux_runtime_settings: ~azure.mgmt.web.models.WebAppRuntimeSettings
    :ivar windows_runtime_settings: Windows-specific settings associated with the minor version.
    :vartype windows_runtime_settings: ~azure.mgmt.web.models.WebAppRuntimeSettings
    :ivar linux_container_settings: Linux-specific settings associated with the Java container
     minor version.
    :vartype linux_container_settings: ~azure.mgmt.web.models.LinuxJavaContainerSettings
    :ivar windows_container_settings: Windows-specific settings associated with the Java container
     minor version.
    :vartype windows_container_settings: ~azure.mgmt.web.models.WindowsJavaContainerSettings
    """

    linux_runtime_settings: Optional["_models.WebAppRuntimeSettings"] = rest_field(
        name="linuxRuntimeSettings", visibility=["read"]
    )
    """Linux-specific settings associated with the minor version."""
    windows_runtime_settings: Optional["_models.WebAppRuntimeSettings"] = rest_field(
        name="windowsRuntimeSettings", visibility=["read"]
    )
    """Windows-specific settings associated with the minor version."""
    linux_container_settings: Optional["_models.LinuxJavaContainerSettings"] = rest_field(
        name="linuxContainerSettings", visibility=["read"]
    )
    """Linux-specific settings associated with the Java container minor version."""
    windows_container_settings: Optional["_models.WindowsJavaContainerSettings"] = rest_field(
        name="windowsContainerSettings", visibility=["read"]
    )
    """Windows-specific settings associated with the Java container minor version."""


class WebAppRuntimeSettings(_Model):
    """Web App runtime settings.

    :ivar runtime_version: Web App stack minor version (runtime only).
    :vartype runtime_version: str
    :ivar remote_debugging_supported: <code>true</code> if remote debugging is supported for the
     stack; otherwise, <code>false</code>.
    :vartype remote_debugging_supported: bool
    :ivar app_insights_settings: Application Insights settings associated with the minor version.
    :vartype app_insights_settings: ~azure.mgmt.web.models.AppInsightsWebAppStackSettings
    :ivar git_hub_action_settings: GitHub Actions settings associated with the minor version.
    :vartype git_hub_action_settings: ~azure.mgmt.web.models.GitHubActionWebAppStackSettings
    :ivar is_preview: <code>true</code> if the stack is in preview; otherwise, <code>false</code>.
    :vartype is_preview: bool
    :ivar is_deprecated: <code>true</code> if the stack is deprecated; otherwise,
     <code>false</code>.
    :vartype is_deprecated: bool
    :ivar is_hidden: <code>true</code> if the stack should be hidden; otherwise,
     <code>false</code>.
    :vartype is_hidden: bool
    :ivar end_of_life_date: End-of-life date for the minor version.
    :vartype end_of_life_date: ~datetime.datetime
    :ivar is_auto_update: <code>true</code> if the stack version is auto-updated; otherwise,
     <code>false</code>.
    :vartype is_auto_update: bool
    :ivar is_early_access: <code>true</code> if the minor version is early-access; otherwise,
     <code>false</code>.
    :vartype is_early_access: bool
    """

    runtime_version: Optional[str] = rest_field(name="runtimeVersion", visibility=["read"])
    """Web App stack minor version (runtime only)."""
    remote_debugging_supported: Optional[bool] = rest_field(name="remoteDebuggingSupported", visibility=["read"])
    """<code>true</code> if remote debugging is supported for the stack; otherwise,
     <code>false</code>."""
    app_insights_settings: Optional["_models.AppInsightsWebAppStackSettings"] = rest_field(
        name="appInsightsSettings", visibility=["read"]
    )
    """Application Insights settings associated with the minor version."""
    git_hub_action_settings: Optional["_models.GitHubActionWebAppStackSettings"] = rest_field(
        name="gitHubActionSettings", visibility=["read"]
    )
    """GitHub Actions settings associated with the minor version."""
    is_preview: Optional[bool] = rest_field(name="isPreview", visibility=["read"])
    """<code>true</code> if the stack is in preview; otherwise, <code>false</code>."""
    is_deprecated: Optional[bool] = rest_field(name="isDeprecated", visibility=["read"])
    """<code>true</code> if the stack is deprecated; otherwise, <code>false</code>."""
    is_hidden: Optional[bool] = rest_field(name="isHidden", visibility=["read"])
    """<code>true</code> if the stack should be hidden; otherwise, <code>false</code>."""
    end_of_life_date: Optional[datetime.datetime] = rest_field(
        name="endOfLifeDate", visibility=["read"], format="rfc3339"
    )
    """End-of-life date for the minor version."""
    is_auto_update: Optional[bool] = rest_field(name="isAutoUpdate", visibility=["read"])
    """<code>true</code> if the stack version is auto-updated; otherwise, <code>false</code>."""
    is_early_access: Optional[bool] = rest_field(name="isEarlyAccess", visibility=["read"])
    """<code>true</code> if the minor version is early-access; otherwise, <code>false</code>."""


class WebAppStack(ProxyOnlyResource):
    """Web App stack.

    :ivar id: Resource Id.
    :vartype id: str
    :ivar name: Resource Name.
    :vartype name: str
    :ivar kind: Kind of resource.
    :vartype kind: str
    :ivar type: Resource type.
    :vartype type: str
    :ivar location: Web App stack location.
    :vartype location: str
    :ivar properties: WebAppStack resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.WebAppStackProperties
    """

    location: Optional[str] = rest_field(visibility=["read"])
    """Web App stack location."""
    properties: Optional["_models.WebAppStackProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """WebAppStack resource specific properties."""

    __flattened_items = ["display_text", "value", "major_versions", "preferred_os"]

    @overload
    def __init__(
        self,
        *,
        kind: Optional[str] = None,
        properties: Optional["_models.WebAppStackProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class WebAppStackProperties(_Model):
    """WebAppStack resource specific properties.

    :ivar display_text: Web App stack (display only).
    :vartype display_text: str
    :ivar value: Web App stack name.
    :vartype value: str
    :ivar major_versions: List of major versions available.
    :vartype major_versions: list[~azure.mgmt.web.models.WebAppMajorVersion]
    :ivar preferred_os: Web App stack preferred OS. Known values are: "Windows" and "Linux".
    :vartype preferred_os: str or ~azure.mgmt.web.models.StackPreferredOs
    """

    display_text: Optional[str] = rest_field(name="displayText", visibility=["read"])
    """Web App stack (display only)."""
    value: Optional[str] = rest_field(visibility=["read"])
    """Web App stack name."""
    major_versions: Optional[list["_models.WebAppMajorVersion"]] = rest_field(name="majorVersions", visibility=["read"])
    """List of major versions available."""
    preferred_os: Optional[Union[str, "_models.StackPreferredOs"]] = rest_field(name="preferredOs", visibility=["read"])
    """Web App stack preferred OS. Known values are: \"Windows\" and \"Linux\"."""


class WebJob(ProxyResource):
    """Web Job Information.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: WebJob resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.WebJobProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.WebJobProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """WebJob resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = ["run_command", "url", "extra_info_url", "web_job_type", "error", "using_sdk", "settings"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.WebJobProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class WebJobProperties(_Model):
    """WebJob resource specific properties.

    :ivar run_command: Run command.
    :vartype run_command: str
    :ivar url: Job URL.
    :vartype url: str
    :ivar extra_info_url: Extra Info URL.
    :vartype extra_info_url: str
    :ivar web_job_type: Job type. Known values are: "Continuous" and "Triggered".
    :vartype web_job_type: str or ~azure.mgmt.web.models.WebJobType
    :ivar error: Error information.
    :vartype error: str
    :ivar using_sdk: Using SDK?.
    :vartype using_sdk: bool
    :ivar settings: Job settings.
    :vartype settings: dict[str, any]
    """

    run_command: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Run command."""
    url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Job URL."""
    extra_info_url: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Extra Info URL."""
    web_job_type: Optional[Union[str, "_models.WebJobType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Job type. Known values are: \"Continuous\" and \"Triggered\"."""
    error: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Error information."""
    using_sdk: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Using SDK?."""
    settings: Optional[dict[str, Any]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Job settings."""

    @overload
    def __init__(
        self,
        *,
        run_command: Optional[str] = None,
        url: Optional[str] = None,
        extra_info_url: Optional[str] = None,
        web_job_type: Optional[Union[str, "_models.WebJobType"]] = None,
        error: Optional[str] = None,
        using_sdk: Optional[bool] = None,
        settings: Optional[dict[str, Any]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WebSiteInstanceStatus(ProxyResource):
    """Concrete proxy resource types can be created by aliasing this type using a specific property
    type.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: WebSiteInstanceStatus resource specific properties.
    :vartype properties: ~azure.mgmt.web.models.WebSiteInstanceStatusProperties
    :ivar kind: Kind of resource.
    :vartype kind: str
    """

    properties: Optional["_models.WebSiteInstanceStatusProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """WebSiteInstanceStatus resource specific properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource."""

    __flattened_items = [
        "state",
        "status_url",
        "detector_url",
        "console_url",
        "health_check_url",
        "containers",
        "physical_zone",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.WebSiteInstanceStatusProperties"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class WebSiteInstanceStatusProperties(_Model):
    """WebSiteInstanceStatus resource specific properties.

    :ivar state: Known values are: "READY", "STOPPED", and "UNKNOWN".
    :vartype state: str or ~azure.mgmt.web.models.SiteRuntimeState
    :ivar status_url: Link to the GetStatusApi in Kudu.
    :vartype status_url: str
    :ivar detector_url: Link to the Diagnose and Solve Portal.
    :vartype detector_url: str
    :ivar console_url: Link to the console to web app instance.
    :vartype console_url: str
    :ivar health_check_url: Link to the console to web app instance.
    :vartype health_check_url: str
    :ivar containers: Dictionary of <ContainerInfo>.
    :vartype containers: dict[str, ~azure.mgmt.web.models.ContainerInfo]
    :ivar physical_zone: The physical zone that the instance is in.
    :vartype physical_zone: str
    """

    state: Optional[Union[str, "_models.SiteRuntimeState"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Known values are: \"READY\", \"STOPPED\", and \"UNKNOWN\"."""
    status_url: Optional[str] = rest_field(name="statusUrl", visibility=["read", "create", "update", "delete", "query"])
    """Link to the GetStatusApi in Kudu."""
    detector_url: Optional[str] = rest_field(
        name="detectorUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """Link to the Diagnose and Solve Portal."""
    console_url: Optional[str] = rest_field(
        name="consoleUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """Link to the console to web app instance."""
    health_check_url: Optional[str] = rest_field(
        name="healthCheckUrl", visibility=["read", "create", "update", "delete", "query"]
    )
    """Link to the console to web app instance."""
    containers: Optional[dict[str, "_models.ContainerInfo"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Dictionary of <ContainerInfo>."""
    physical_zone: Optional[str] = rest_field(
        name="physicalZone", visibility=["read", "create", "update", "delete", "query"]
    )
    """The physical zone that the instance is in."""

    @overload
    def __init__(
        self,
        *,
        state: Optional[Union[str, "_models.SiteRuntimeState"]] = None,
        status_url: Optional[str] = None,
        detector_url: Optional[str] = None,
        console_url: Optional[str] = None,
        health_check_url: Optional[str] = None,
        containers: Optional[dict[str, "_models.ContainerInfo"]] = None,
        physical_zone: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WindowsJavaContainerSettings(_Model):
    """Windows Java Container settings.

    :ivar java_container: Java container (runtime only).
    :vartype java_container: str
    :ivar java_container_version: Java container version (runtime only).
    :vartype java_container_version: str
    :ivar is_preview: <code>true</code> if the stack is in preview; otherwise, <code>false</code>.
    :vartype is_preview: bool
    :ivar is_deprecated: <code>true</code> if the stack is deprecated; otherwise,
     <code>false</code>.
    :vartype is_deprecated: bool
    :ivar is_hidden: <code>true</code> if the stack should be hidden; otherwise,
     <code>false</code>.
    :vartype is_hidden: bool
    :ivar end_of_life_date: End-of-life date for the minor version.
    :vartype end_of_life_date: ~datetime.datetime
    :ivar is_auto_update: <code>true</code> if the stack version is auto-updated; otherwise,
     <code>false</code>.
    :vartype is_auto_update: bool
    :ivar is_early_access: <code>true</code> if the minor version is early-access; otherwise,
     <code>false</code>.
    :vartype is_early_access: bool
    """

    java_container: Optional[str] = rest_field(name="javaContainer", visibility=["read"])
    """Java container (runtime only)."""
    java_container_version: Optional[str] = rest_field(name="javaContainerVersion", visibility=["read"])
    """Java container version (runtime only)."""
    is_preview: Optional[bool] = rest_field(name="isPreview", visibility=["read"])
    """<code>true</code> if the stack is in preview; otherwise, <code>false</code>."""
    is_deprecated: Optional[bool] = rest_field(name="isDeprecated", visibility=["read"])
    """<code>true</code> if the stack is deprecated; otherwise, <code>false</code>."""
    is_hidden: Optional[bool] = rest_field(name="isHidden", visibility=["read"])
    """<code>true</code> if the stack should be hidden; otherwise, <code>false</code>."""
    end_of_life_date: Optional[datetime.datetime] = rest_field(
        name="endOfLifeDate", visibility=["read"], format="rfc3339"
    )
    """End-of-life date for the minor version."""
    is_auto_update: Optional[bool] = rest_field(name="isAutoUpdate", visibility=["read"])
    """<code>true</code> if the stack version is auto-updated; otherwise, <code>false</code>."""
    is_early_access: Optional[bool] = rest_field(name="isEarlyAccess", visibility=["read"])
    """<code>true</code> if the minor version is early-access; otherwise, <code>false</code>."""


class WorkerPool(_Model):
    """Worker pool of an App Service Environment.

    :ivar worker_size_id: Worker size ID for referencing this worker pool.
    :vartype worker_size_id: int
    :ivar compute_mode: Shared or dedicated app hosting. Known values are: "Shared", "Dedicated",
     and "Dynamic".
    :vartype compute_mode: str or ~azure.mgmt.web.models.ComputeModeOptions
    :ivar worker_size: VM size of the worker pool instances.
    :vartype worker_size: str
    :ivar worker_count: Number of instances in the worker pool.
    :vartype worker_count: int
    :ivar instance_names: Names of all instances in the worker pool (read only).
    :vartype instance_names: list[str]
    """

    worker_size_id: Optional[int] = rest_field(
        name="workerSizeId", visibility=["read", "create", "update", "delete", "query"]
    )
    """Worker size ID for referencing this worker pool."""
    compute_mode: Optional[Union[str, "_models.ComputeModeOptions"]] = rest_field(
        name="computeMode", visibility=["read", "create", "update", "delete", "query"]
    )
    """Shared or dedicated app hosting. Known values are: \"Shared\", \"Dedicated\", and \"Dynamic\"."""
    worker_size: Optional[str] = rest_field(
        name="workerSize", visibility=["read", "create", "update", "delete", "query"]
    )
    """VM size of the worker pool instances."""
    worker_count: Optional[int] = rest_field(
        name="workerCount", visibility=["read", "create", "update", "delete", "query"]
    )
    """Number of instances in the worker pool."""
    instance_names: Optional[list[str]] = rest_field(name="instanceNames", visibility=["read"])
    """Names of all instances in the worker pool (read only)."""

    @overload
    def __init__(
        self,
        *,
        worker_size_id: Optional[int] = None,
        compute_mode: Optional[Union[str, "_models.ComputeModeOptions"]] = None,
        worker_size: Optional[str] = None,
        worker_count: Optional[int] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkerPoolResource(ProxyResource):
    """Worker pool of an App Service Environment ARM resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: Core resource properties.
    :vartype properties: ~azure.mgmt.web.models.WorkerPool
    :ivar sku: Description of a SKU for a scalable resource.
    :vartype sku: ~azure.mgmt.web.models.SkuDescription
    :ivar kind: Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind.
    :vartype kind: str
    """

    properties: Optional["_models.WorkerPool"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Core resource properties."""
    sku: Optional["_models.SkuDescription"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Description of a SKU for a scalable resource."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Kind of resource. If the resource is an app, you can refer to
     `https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference
     <https://github.com/Azure/app-service-linux-docs/blob/master/Things_You_Should_Know/kind_property.md#app-service-resource-kind-reference>`_
     for details supported values for kind."""

    __flattened_items = ["worker_size_id", "compute_mode", "worker_size", "worker_count", "instance_names"]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.WorkerPool"] = None,
        sku: Optional["_models.SkuDescription"] = None,
        kind: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class WorkflowResource(_Model):
    """The base resource type.

    :ivar id: The resource id.
    :vartype id: str
    :ivar name: Gets the resource name.
    :vartype name: str
    :ivar type: Gets the resource type.
    :vartype type: str
    :ivar location: The resource location.
    :vartype location: str
    :ivar tags: The resource tags.
    :vartype tags: dict[str, str]
    """

    id: Optional[str] = rest_field(visibility=["read"])
    """The resource id."""
    name: Optional[str] = rest_field(visibility=["read"])
    """Gets the resource name."""
    type: Optional[str] = rest_field(visibility=["read"])
    """Gets the resource type."""
    location: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The resource location."""
    tags: Optional[dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The resource tags."""

    @overload
    def __init__(
        self,
        *,
        location: Optional[str] = None,
        tags: Optional[dict[str, str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class Workflow(WorkflowResource):
    """The workflow type.

    :ivar id: The resource id.
    :vartype id: str
    :ivar name: Gets the resource name.
    :vartype name: str
    :ivar type: Gets the resource type.
    :vartype type: str
    :ivar location: The resource location.
    :vartype location: str
    :ivar tags: The resource tags.
    :vartype tags: dict[str, str]
    :ivar properties: The workflow properties.
    :vartype properties: ~azure.mgmt.web.models.WorkflowProperties
    :ivar identity: Managed service identity.
    :vartype identity: ~azure.mgmt.web.models.ManagedServiceIdentity
    """

    properties: Optional["_models.WorkflowProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The workflow properties."""
    identity: Optional["_models.ManagedServiceIdentity"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Managed service identity."""

    __flattened_items = [
        "provisioning_state",
        "created_time",
        "changed_time",
        "state",
        "version",
        "access_endpoint",
        "endpoints_configuration",
        "access_control",
        "sku",
        "integration_account",
        "integration_service_environment",
        "definition",
        "parameters",
        "kind",
    ]

    @overload
    def __init__(
        self,
        *,
        location: Optional[str] = None,
        tags: Optional[dict[str, str]] = None,
        properties: Optional["_models.WorkflowProperties"] = None,
        identity: Optional["_models.ManagedServiceIdentity"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class WorkflowArtifacts(_Model):
    """The workflow filter.

    :ivar app_settings: Application settings of the workflow.
    :vartype app_settings: any
    :ivar files: Files of the app.
    :vartype files: dict[str, any]
    :ivar files_to_delete: Files of the app to delete.
    :vartype files_to_delete: list[str]
    """

    app_settings: Optional[Any] = rest_field(
        name="appSettings", visibility=["read", "create", "update", "delete", "query"]
    )
    """Application settings of the workflow."""
    files: Optional[dict[str, Any]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Files of the app."""
    files_to_delete: Optional[list[str]] = rest_field(
        name="filesToDelete", visibility=["read", "create", "update", "delete", "query"]
    )
    """Files of the app to delete."""

    @overload
    def __init__(
        self,
        *,
        app_settings: Optional[Any] = None,
        files: Optional[dict[str, Any]] = None,
        files_to_delete: Optional[list[str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowEnvelope(ProxyResource):
    """Workflow properties definition.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: Additional workflow properties.
    :vartype properties: ~azure.mgmt.web.models.WorkflowEnvelopeProperties
    :ivar kind: The resource kind.
    :vartype kind: str
    :ivar location: The resource location.
    :vartype location: str
    """

    properties: Optional["_models.WorkflowEnvelopeProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Additional workflow properties."""
    kind: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The resource kind."""
    location: Optional[str] = rest_field(visibility=["read", "create"])
    """The resource location."""

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.WorkflowEnvelopeProperties"] = None,
        kind: Optional[str] = None,
        location: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowEnvelopeProperties(_Model):
    """Additional workflow properties.

    :ivar files: Gets or sets the files.
    :vartype files: dict[str, any]
    :ivar flow_state: Gets or sets the state of the workflow. Known values are: "NotSpecified",
     "Completed", "Enabled", "Disabled", "Deleted", and "Suspended".
    :vartype flow_state: str or ~azure.mgmt.web.models.WorkflowState
    :ivar health: Gets or sets workflow health.
    :vartype health: ~azure.mgmt.web.models.WorkflowHealth
    """

    files: Optional[dict[str, Any]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Gets or sets the files."""
    flow_state: Optional[Union[str, "_models.WorkflowState"]] = rest_field(
        name="flowState", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets or sets the state of the workflow. Known values are: \"NotSpecified\", \"Completed\",
     \"Enabled\", \"Disabled\", \"Deleted\", and \"Suspended\"."""
    health: Optional["_models.WorkflowHealth"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Gets or sets workflow health."""

    @overload
    def __init__(
        self,
        *,
        files: Optional[dict[str, Any]] = None,
        flow_state: Optional[Union[str, "_models.WorkflowState"]] = None,
        health: Optional["_models.WorkflowHealth"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowErrorResponse(_Model):
    """Error response indicates Logic service is not able to process the incoming request. The error
    property contains the error details.

    :ivar error: The error properties.
    :vartype error: ~azure.mgmt.web.models.ErrorProperties
    """

    error: Optional["_models.ErrorProperties"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The error properties."""

    @overload
    def __init__(
        self,
        *,
        error: Optional["_models.ErrorProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowHealth(_Model):
    """Represents the workflow health.

    :ivar state: Gets or sets the workflow health state. Required. Known values are:
     "NotSpecified", "Healthy", "Unhealthy", and "Unknown".
    :vartype state: str or ~azure.mgmt.web.models.WorkflowHealthState
    :ivar error: Gets or sets the workflow error.
    :vartype error: ~azure.mgmt.web.models.ErrorEntity
    """

    state: Union[str, "_models.WorkflowHealthState"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets or sets the workflow health state. Required. Known values are: \"NotSpecified\",
     \"Healthy\", \"Unhealthy\", and \"Unknown\"."""
    error: Optional["_models.ErrorEntity"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """Gets or sets the workflow error."""

    @overload
    def __init__(
        self,
        *,
        state: Union[str, "_models.WorkflowHealthState"],
        error: Optional["_models.ErrorEntity"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowParameter(_Model):
    """The workflow parameters.

    :ivar type: The type. Known values are: "NotSpecified", "String", "SecureString", "Int",
     "Float", "Bool", "Array", "Object", and "SecureObject".
    :vartype type: str or ~azure.mgmt.web.models.ParameterType
    :ivar value: The value.
    :vartype value: any
    :ivar metadata: The metadata.
    :vartype metadata: any
    :ivar description: The description.
    :vartype description: str
    """

    type: Optional[Union[str, "_models.ParameterType"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The type. Known values are: \"NotSpecified\", \"String\", \"SecureString\", \"Int\", \"Float\",
     \"Bool\", \"Array\", \"Object\", and \"SecureObject\"."""
    value: Optional[Any] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The value."""
    metadata: Optional[Any] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The metadata."""
    description: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The description."""

    @overload
    def __init__(
        self,
        *,
        type: Optional[Union[str, "_models.ParameterType"]] = None,
        value: Optional[Any] = None,
        metadata: Optional[Any] = None,
        description: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowOutputParameter(WorkflowParameter):
    """The workflow output parameter.

    :ivar type: The type. Known values are: "NotSpecified", "String", "SecureString", "Int",
     "Float", "Bool", "Array", "Object", and "SecureObject".
    :vartype type: str or ~azure.mgmt.web.models.ParameterType
    :ivar value: The value.
    :vartype value: any
    :ivar metadata: The metadata.
    :vartype metadata: any
    :ivar description: The description.
    :vartype description: str
    :ivar error: Gets the error.
    :vartype error: any
    """

    error: Optional[Any] = rest_field(visibility=["read"])
    """Gets the error."""

    @overload
    def __init__(
        self,
        *,
        type: Optional[Union[str, "_models.ParameterType"]] = None,
        value: Optional[Any] = None,
        metadata: Optional[Any] = None,
        description: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowProperties(_Model):
    """The workflow properties.

    :ivar provisioning_state: Gets the provisioning state. Known values are: "NotSpecified",
     "Accepted", "Running", "Ready", "Creating", "Created", "Deleting", "Deleted", "Canceled",
     "Failed", "Succeeded", "Moving", "Updating", "Registering", "Registered", "Unregistering",
     "Unregistered", "Completed", "Renewing", "Pending", "Waiting", and "InProgress".
    :vartype provisioning_state: str or ~azure.mgmt.web.models.WorkflowProvisioningState
    :ivar created_time: Gets the created time.
    :vartype created_time: ~datetime.datetime
    :ivar changed_time: Gets the changed time.
    :vartype changed_time: ~datetime.datetime
    :ivar state: The state. Known values are: "NotSpecified", "Completed", "Enabled", "Disabled",
     "Deleted", and "Suspended".
    :vartype state: str or ~azure.mgmt.web.models.WorkflowState
    :ivar version: Gets the version.
    :vartype version: str
    :ivar access_endpoint: Gets the access endpoint.
    :vartype access_endpoint: str
    :ivar endpoints_configuration: The endpoints configuration.
    :vartype endpoints_configuration: ~azure.mgmt.web.models.FlowEndpointsConfiguration
    :ivar access_control: The access control configuration.
    :vartype access_control: ~azure.mgmt.web.models.FlowAccessControlConfiguration
    :ivar sku: The sku.
    :vartype sku: ~azure.mgmt.web.models.WorkflowSku
    :ivar integration_account: The integration account.
    :vartype integration_account: ~azure.mgmt.web.models.ResourceReference
    :ivar integration_service_environment: The integration service environment.
    :vartype integration_service_environment: ~azure.mgmt.web.models.ResourceReference
    :ivar definition: The definition.
    :vartype definition: any
    :ivar parameters: The parameters.
    :vartype parameters: dict[str, ~azure.mgmt.web.models.WorkflowParameter]
    :ivar kind: The workflow kind. Known values are: "Stateful" and "Stateless".
    :vartype kind: str or ~azure.mgmt.web.models.Kind
    """

    provisioning_state: Optional[Union[str, "_models.WorkflowProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read"]
    )
    """Gets the provisioning state. Known values are: \"NotSpecified\", \"Accepted\", \"Running\",
     \"Ready\", \"Creating\", \"Created\", \"Deleting\", \"Deleted\", \"Canceled\", \"Failed\",
     \"Succeeded\", \"Moving\", \"Updating\", \"Registering\", \"Registered\", \"Unregistering\",
     \"Unregistered\", \"Completed\", \"Renewing\", \"Pending\", \"Waiting\", and \"InProgress\"."""
    created_time: Optional[datetime.datetime] = rest_field(name="createdTime", visibility=["read"], format="rfc3339")
    """Gets the created time."""
    changed_time: Optional[datetime.datetime] = rest_field(name="changedTime", visibility=["read"], format="rfc3339")
    """Gets the changed time."""
    state: Optional[Union[str, "_models.WorkflowState"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The state. Known values are: \"NotSpecified\", \"Completed\", \"Enabled\", \"Disabled\",
     \"Deleted\", and \"Suspended\"."""
    version: Optional[str] = rest_field(visibility=["read"])
    """Gets the version."""
    access_endpoint: Optional[str] = rest_field(name="accessEndpoint", visibility=["read"])
    """Gets the access endpoint."""
    endpoints_configuration: Optional["_models.FlowEndpointsConfiguration"] = rest_field(
        name="endpointsConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """The endpoints configuration."""
    access_control: Optional["_models.FlowAccessControlConfiguration"] = rest_field(
        name="accessControl", visibility=["read", "create", "update", "delete", "query"]
    )
    """The access control configuration."""
    sku: Optional["_models.WorkflowSku"] = rest_field(visibility=["read"])
    """The sku."""
    integration_account: Optional["_models.ResourceReference"] = rest_field(
        name="integrationAccount", visibility=["read", "create", "update", "delete", "query"]
    )
    """The integration account."""
    integration_service_environment: Optional["_models.ResourceReference"] = rest_field(
        name="integrationServiceEnvironment", visibility=["read", "create", "update", "delete", "query"]
    )
    """The integration service environment."""
    definition: Optional[Any] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The definition."""
    parameters: Optional[dict[str, "_models.WorkflowParameter"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The parameters."""
    kind: Optional[Union[str, "_models.Kind"]] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The workflow kind. Known values are: \"Stateful\" and \"Stateless\"."""

    @overload
    def __init__(
        self,
        *,
        state: Optional[Union[str, "_models.WorkflowState"]] = None,
        endpoints_configuration: Optional["_models.FlowEndpointsConfiguration"] = None,
        access_control: Optional["_models.FlowAccessControlConfiguration"] = None,
        integration_account: Optional["_models.ResourceReference"] = None,
        integration_service_environment: Optional["_models.ResourceReference"] = None,
        definition: Optional[Any] = None,
        parameters: Optional[dict[str, "_models.WorkflowParameter"]] = None,
        kind: Optional[Union[str, "_models.Kind"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowRun(ProxyResource):
    """The workflow run.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: The workflow run properties.
    :vartype properties: ~azure.mgmt.web.models.WorkflowRunProperties
    """

    properties: Optional["_models.WorkflowRunProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The workflow run properties."""

    __flattened_items = [
        "wait_end_time",
        "start_time",
        "end_time",
        "status",
        "code",
        "error",
        "correlation_id",
        "correlation",
        "workflow",
        "trigger",
        "outputs",
        "response",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.WorkflowRunProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class WorkflowRunAction(ProxyResource):
    """The workflow run action.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: The workflow run action properties.
    :vartype properties: ~azure.mgmt.web.models.WorkflowRunActionProperties
    """

    properties: Optional["_models.WorkflowRunActionProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The workflow run action properties."""

    __flattened_items = [
        "start_time",
        "end_time",
        "status",
        "code",
        "error",
        "tracking_id",
        "correlation",
        "inputs_link",
        "outputs_link",
        "tracked_properties",
        "retry_history",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.WorkflowRunActionProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class WorkflowRunActionProperties(_Model):
    """The workflow run action properties.

    :ivar start_time: Gets the start time.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: Gets the end time.
    :vartype end_time: ~datetime.datetime
    :ivar status: Gets the status. Known values are: "NotSpecified", "Paused", "Running",
     "Waiting", "Succeeded", "Skipped", "Suspended", "Cancelled", "Failed", "Faulted", "TimedOut",
     "Aborted", and "Ignored".
    :vartype status: str or ~azure.mgmt.web.models.WorkflowStatus
    :ivar code: Gets the code.
    :vartype code: str
    :ivar error: Gets the error.
    :vartype error: any
    :ivar tracking_id: Gets the tracking id.
    :vartype tracking_id: str
    :ivar correlation: The correlation properties.
    :vartype correlation: ~azure.mgmt.web.models.RunActionCorrelation
    :ivar inputs_link: Gets the link to inputs.
    :vartype inputs_link: ~azure.mgmt.web.models.ContentLink
    :ivar outputs_link: Gets the link to outputs.
    :vartype outputs_link: ~azure.mgmt.web.models.ContentLink
    :ivar tracked_properties: Gets the tracked properties.
    :vartype tracked_properties: any
    :ivar retry_history: Gets the retry histories.
    :vartype retry_history: list[~azure.mgmt.web.models.RetryHistory]
    """

    start_time: Optional[datetime.datetime] = rest_field(name="startTime", visibility=["read"], format="rfc3339")
    """Gets the start time."""
    end_time: Optional[datetime.datetime] = rest_field(name="endTime", visibility=["read"], format="rfc3339")
    """Gets the end time."""
    status: Optional[Union[str, "_models.WorkflowStatus"]] = rest_field(visibility=["read"])
    """Gets the status. Known values are: \"NotSpecified\", \"Paused\", \"Running\", \"Waiting\",
     \"Succeeded\", \"Skipped\", \"Suspended\", \"Cancelled\", \"Failed\", \"Faulted\",
     \"TimedOut\", \"Aborted\", and \"Ignored\"."""
    code: Optional[str] = rest_field(visibility=["read"])
    """Gets the code."""
    error: Optional[Any] = rest_field(visibility=["read"])
    """Gets the error."""
    tracking_id: Optional[str] = rest_field(name="trackingId", visibility=["read"])
    """Gets the tracking id."""
    correlation: Optional["_models.RunActionCorrelation"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The correlation properties."""
    inputs_link: Optional["_models.ContentLink"] = rest_field(name="inputsLink", visibility=["read"])
    """Gets the link to inputs."""
    outputs_link: Optional["_models.ContentLink"] = rest_field(name="outputsLink", visibility=["read"])
    """Gets the link to outputs."""
    tracked_properties: Optional[Any] = rest_field(name="trackedProperties", visibility=["read"])
    """Gets the tracked properties."""
    retry_history: Optional[list["_models.RetryHistory"]] = rest_field(
        name="retryHistory", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets the retry histories."""

    @overload
    def __init__(
        self,
        *,
        correlation: Optional["_models.RunActionCorrelation"] = None,
        retry_history: Optional[list["_models.RetryHistory"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowRunActionRepetitionDefinition(TrackedResource):
    """The workflow run action repetition definition.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: The workflow run action repetition properties definition. Required.
    :vartype properties: ~azure.mgmt.web.models.WorkflowRunActionRepetitionProperties
    """

    properties: "_models.WorkflowRunActionRepetitionProperties" = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The workflow run action repetition properties definition. Required."""

    __flattened_items = [
        "start_time",
        "end_time",
        "correlation",
        "status",
        "code",
        "error",
        "tracking_id",
        "inputs",
        "inputs_link",
        "outputs",
        "outputs_link",
        "tracked_properties",
        "retry_history",
        "iteration_count",
        "repetition_indexes",
    ]

    @overload
    def __init__(
        self,
        *,
        location: str,
        properties: "_models.WorkflowRunActionRepetitionProperties",
        tags: Optional[dict[str, str]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class WorkflowRunActionRepetitionProperties(OperationResult):
    """The workflow run action repetition properties definition.

    :ivar start_time: The start time of the workflow scope repetition.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: The end time of the workflow scope repetition.
    :vartype end_time: ~datetime.datetime
    :ivar correlation: The correlation properties.
    :vartype correlation: ~azure.mgmt.web.models.RunActionCorrelation
    :ivar status: The status of the workflow scope repetition. Known values are: "NotSpecified",
     "Paused", "Running", "Waiting", "Succeeded", "Skipped", "Suspended", "Cancelled", "Failed",
     "Faulted", "TimedOut", "Aborted", and "Ignored".
    :vartype status: str or ~azure.mgmt.web.models.WorkflowStatus
    :ivar code: The workflow scope repetition code.
    :vartype code: str
    :ivar error: Anything.
    :vartype error: any
    :ivar tracking_id: Gets the tracking id.
    :vartype tracking_id: str
    :ivar inputs: Gets the inputs.
    :vartype inputs: any
    :ivar inputs_link: Gets the link to inputs.
    :vartype inputs_link: ~azure.mgmt.web.models.ContentLink
    :ivar outputs: Gets the outputs.
    :vartype outputs: any
    :ivar outputs_link: Gets the link to outputs.
    :vartype outputs_link: ~azure.mgmt.web.models.ContentLink
    :ivar tracked_properties: Gets the tracked properties.
    :vartype tracked_properties: any
    :ivar retry_history: Gets the retry histories.
    :vartype retry_history: list[~azure.mgmt.web.models.RetryHistory]
    :ivar iteration_count:
    :vartype iteration_count: int
    :ivar repetition_indexes: The repetition indexes.
    :vartype repetition_indexes: list[~azure.mgmt.web.models.RepetitionIndex]
    """

    repetition_indexes: Optional[list["_models.RepetitionIndex"]] = rest_field(
        name="repetitionIndexes", visibility=["read", "create", "update", "delete", "query"]
    )
    """The repetition indexes."""

    @overload
    def __init__(
        self,
        *,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        correlation: Optional["_models.RunActionCorrelation"] = None,
        status: Optional[Union[str, "_models.WorkflowStatus"]] = None,
        code: Optional[str] = None,
        error: Optional[Any] = None,
        retry_history: Optional[list["_models.RetryHistory"]] = None,
        iteration_count: Optional[int] = None,
        repetition_indexes: Optional[list["_models.RepetitionIndex"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowRunProperties(_Model):
    """The workflow run properties.

    :ivar wait_end_time: Gets the wait end time.
    :vartype wait_end_time: ~datetime.datetime
    :ivar start_time: Gets the start time.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: Gets the end time.
    :vartype end_time: ~datetime.datetime
    :ivar status: Gets the status. Known values are: "NotSpecified", "Paused", "Running",
     "Waiting", "Succeeded", "Skipped", "Suspended", "Cancelled", "Failed", "Faulted", "TimedOut",
     "Aborted", and "Ignored".
    :vartype status: str or ~azure.mgmt.web.models.WorkflowStatus
    :ivar code: Gets the code.
    :vartype code: str
    :ivar error: Gets the error.
    :vartype error: any
    :ivar correlation_id: Gets the correlation id.
    :vartype correlation_id: str
    :ivar correlation: The run correlation.
    :vartype correlation: ~azure.mgmt.web.models.Correlation
    :ivar workflow: Gets the reference to workflow version.
    :vartype workflow: ~azure.mgmt.web.models.ResourceReference
    :ivar trigger: Gets the fired trigger.
    :vartype trigger: ~azure.mgmt.web.models.WorkflowRunTrigger
    :ivar outputs: Gets the outputs.
    :vartype outputs: dict[str, ~azure.mgmt.web.models.WorkflowOutputParameter]
    :ivar response: Gets the response of the flow run.
    :vartype response: ~azure.mgmt.web.models.WorkflowRunTrigger
    """

    wait_end_time: Optional[datetime.datetime] = rest_field(name="waitEndTime", visibility=["read"], format="rfc3339")
    """Gets the wait end time."""
    start_time: Optional[datetime.datetime] = rest_field(name="startTime", visibility=["read"], format="rfc3339")
    """Gets the start time."""
    end_time: Optional[datetime.datetime] = rest_field(name="endTime", visibility=["read"], format="rfc3339")
    """Gets the end time."""
    status: Optional[Union[str, "_models.WorkflowStatus"]] = rest_field(visibility=["read"])
    """Gets the status. Known values are: \"NotSpecified\", \"Paused\", \"Running\", \"Waiting\",
     \"Succeeded\", \"Skipped\", \"Suspended\", \"Cancelled\", \"Failed\", \"Faulted\",
     \"TimedOut\", \"Aborted\", and \"Ignored\"."""
    code: Optional[str] = rest_field(visibility=["read"])
    """Gets the code."""
    error: Optional[Any] = rest_field(visibility=["read"])
    """Gets the error."""
    correlation_id: Optional[str] = rest_field(name="correlationId", visibility=["read"])
    """Gets the correlation id."""
    correlation: Optional["_models.Correlation"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The run correlation."""
    workflow: Optional["_models.ResourceReference"] = rest_field(visibility=["read"])
    """Gets the reference to workflow version."""
    trigger: Optional["_models.WorkflowRunTrigger"] = rest_field(visibility=["read"])
    """Gets the fired trigger."""
    outputs: Optional[dict[str, "_models.WorkflowOutputParameter"]] = rest_field(visibility=["read"])
    """Gets the outputs."""
    response: Optional["_models.WorkflowRunTrigger"] = rest_field(visibility=["read"])
    """Gets the response of the flow run."""

    @overload
    def __init__(
        self,
        *,
        correlation: Optional["_models.Correlation"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowRunTrigger(_Model):
    """The workflow run trigger.

    :ivar name: Gets the name.
    :vartype name: str
    :ivar inputs: Gets the inputs.
    :vartype inputs: any
    :ivar inputs_link: Gets the link to inputs.
    :vartype inputs_link: ~azure.mgmt.web.models.ContentLink
    :ivar outputs: Gets the outputs.
    :vartype outputs: any
    :ivar outputs_link: Gets the link to outputs.
    :vartype outputs_link: ~azure.mgmt.web.models.ContentLink
    :ivar scheduled_time: Gets the scheduled time.
    :vartype scheduled_time: ~datetime.datetime
    :ivar start_time: Gets the start time.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: Gets the end time.
    :vartype end_time: ~datetime.datetime
    :ivar tracking_id: Gets the tracking id.
    :vartype tracking_id: str
    :ivar correlation: The run correlation.
    :vartype correlation: ~azure.mgmt.web.models.Correlation
    :ivar code: Gets the code.
    :vartype code: str
    :ivar status: Gets the status. Known values are: "NotSpecified", "Paused", "Running",
     "Waiting", "Succeeded", "Skipped", "Suspended", "Cancelled", "Failed", "Faulted", "TimedOut",
     "Aborted", and "Ignored".
    :vartype status: str or ~azure.mgmt.web.models.WorkflowStatus
    :ivar error: Gets the error.
    :vartype error: any
    :ivar tracked_properties: Gets the tracked properties.
    :vartype tracked_properties: any
    """

    name: Optional[str] = rest_field(visibility=["read"])
    """Gets the name."""
    inputs: Optional[Any] = rest_field(visibility=["read"])
    """Gets the inputs."""
    inputs_link: Optional["_models.ContentLink"] = rest_field(name="inputsLink", visibility=["read"])
    """Gets the link to inputs."""
    outputs: Optional[Any] = rest_field(visibility=["read"])
    """Gets the outputs."""
    outputs_link: Optional["_models.ContentLink"] = rest_field(name="outputsLink", visibility=["read"])
    """Gets the link to outputs."""
    scheduled_time: Optional[datetime.datetime] = rest_field(
        name="scheduledTime", visibility=["read"], format="rfc3339"
    )
    """Gets the scheduled time."""
    start_time: Optional[datetime.datetime] = rest_field(name="startTime", visibility=["read"], format="rfc3339")
    """Gets the start time."""
    end_time: Optional[datetime.datetime] = rest_field(name="endTime", visibility=["read"], format="rfc3339")
    """Gets the end time."""
    tracking_id: Optional[str] = rest_field(name="trackingId", visibility=["read"])
    """Gets the tracking id."""
    correlation: Optional["_models.Correlation"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The run correlation."""
    code: Optional[str] = rest_field(visibility=["read"])
    """Gets the code."""
    status: Optional[Union[str, "_models.WorkflowStatus"]] = rest_field(visibility=["read"])
    """Gets the status. Known values are: \"NotSpecified\", \"Paused\", \"Running\", \"Waiting\",
     \"Succeeded\", \"Skipped\", \"Suspended\", \"Cancelled\", \"Failed\", \"Faulted\",
     \"TimedOut\", \"Aborted\", and \"Ignored\"."""
    error: Optional[Any] = rest_field(visibility=["read"])
    """Gets the error."""
    tracked_properties: Optional[Any] = rest_field(name="trackedProperties", visibility=["read"])
    """Gets the tracked properties."""

    @overload
    def __init__(
        self,
        *,
        correlation: Optional["_models.Correlation"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowSku(_Model):
    """The sku type.

    :ivar name: The name. Required. Known values are: "NotSpecified", "Free", "Shared", "Basic",
     "Standard", and "Premium".
    :vartype name: str or ~azure.mgmt.web.models.WorkflowSkuName
    :ivar plan: The reference to plan.
    :vartype plan: ~azure.mgmt.web.models.ResourceReference
    """

    name: Union[str, "_models.WorkflowSkuName"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The name. Required. Known values are: \"NotSpecified\", \"Free\", \"Shared\", \"Basic\",
     \"Standard\", and \"Premium\"."""
    plan: Optional["_models.ResourceReference"] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The reference to plan."""

    @overload
    def __init__(
        self,
        *,
        name: Union[str, "_models.WorkflowSkuName"],
        plan: Optional["_models.ResourceReference"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowTrigger(ProxyResource):
    """The workflow trigger.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: The workflow trigger properties.
    :vartype properties: ~azure.mgmt.web.models.WorkflowTriggerProperties
    """

    properties: Optional["_models.WorkflowTriggerProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The workflow trigger properties."""

    __flattened_items = [
        "provisioning_state",
        "created_time",
        "changed_time",
        "state",
        "status",
        "last_execution_time",
        "next_execution_time",
        "recurrence",
        "workflow",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.WorkflowTriggerProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class WorkflowTriggerCallbackUrl(_Model):
    """The workflow trigger callback URL.

    :ivar value: Gets the workflow trigger callback URL.
    :vartype value: str
    :ivar method: Gets the workflow trigger callback URL HTTP method.
    :vartype method: str
    :ivar base_path: Gets the workflow trigger callback URL base path.
    :vartype base_path: str
    :ivar relative_path: Gets the workflow trigger callback URL relative path.
    :vartype relative_path: str
    :ivar relative_path_parameters: Gets the workflow trigger callback URL relative path
     parameters.
    :vartype relative_path_parameters: list[str]
    :ivar queries: Gets the workflow trigger callback URL query parameters.
    :vartype queries: ~azure.mgmt.web.models.WorkflowTriggerListCallbackUrlQueries
    """

    value: Optional[str] = rest_field(visibility=["read"])
    """Gets the workflow trigger callback URL."""
    method: Optional[str] = rest_field(visibility=["read"])
    """Gets the workflow trigger callback URL HTTP method."""
    base_path: Optional[str] = rest_field(name="basePath", visibility=["read"])
    """Gets the workflow trigger callback URL base path."""
    relative_path: Optional[str] = rest_field(name="relativePath", visibility=["read"])
    """Gets the workflow trigger callback URL relative path."""
    relative_path_parameters: Optional[list[str]] = rest_field(
        name="relativePathParameters", visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets the workflow trigger callback URL relative path parameters."""
    queries: Optional["_models.WorkflowTriggerListCallbackUrlQueries"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets the workflow trigger callback URL query parameters."""

    @overload
    def __init__(
        self,
        *,
        relative_path_parameters: Optional[list[str]] = None,
        queries: Optional["_models.WorkflowTriggerListCallbackUrlQueries"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowTriggerHistory(ProxyResource):
    """The workflow trigger history.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar properties: Gets the workflow trigger history properties.
    :vartype properties: ~azure.mgmt.web.models.WorkflowTriggerHistoryProperties
    """

    properties: Optional["_models.WorkflowTriggerHistoryProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """Gets the workflow trigger history properties."""

    __flattened_items = [
        "start_time",
        "end_time",
        "scheduled_time",
        "status",
        "code",
        "error",
        "tracking_id",
        "correlation",
        "inputs_link",
        "outputs_link",
        "fired",
        "run",
    ]

    @overload
    def __init__(
        self,
        *,
        properties: Optional["_models.WorkflowTriggerHistoryProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class WorkflowTriggerHistoryProperties(_Model):
    """The workflow trigger history properties.

    :ivar start_time: Gets the start time.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: Gets the end time.
    :vartype end_time: ~datetime.datetime
    :ivar scheduled_time: The scheduled time.
    :vartype scheduled_time: ~datetime.datetime
    :ivar status: Gets the status. Known values are: "NotSpecified", "Paused", "Running",
     "Waiting", "Succeeded", "Skipped", "Suspended", "Cancelled", "Failed", "Faulted", "TimedOut",
     "Aborted", and "Ignored".
    :vartype status: str or ~azure.mgmt.web.models.WorkflowStatus
    :ivar code: Gets the code.
    :vartype code: str
    :ivar error: Gets the error.
    :vartype error: any
    :ivar tracking_id: Gets the tracking id.
    :vartype tracking_id: str
    :ivar correlation: The run correlation.
    :vartype correlation: ~azure.mgmt.web.models.Correlation
    :ivar inputs_link: Gets the link to input parameters.
    :vartype inputs_link: ~azure.mgmt.web.models.ContentLink
    :ivar outputs_link: Gets the link to output parameters.
    :vartype outputs_link: ~azure.mgmt.web.models.ContentLink
    :ivar fired: The value indicating whether trigger was fired.
    :vartype fired: bool
    :ivar run: Gets the reference to workflow run.
    :vartype run: ~azure.mgmt.web.models.ResourceReference
    """

    start_time: Optional[datetime.datetime] = rest_field(name="startTime", visibility=["read"], format="rfc3339")
    """Gets the start time."""
    end_time: Optional[datetime.datetime] = rest_field(name="endTime", visibility=["read"], format="rfc3339")
    """Gets the end time."""
    scheduled_time: Optional[datetime.datetime] = rest_field(
        name="scheduledTime", visibility=["read"], format="rfc3339"
    )
    """The scheduled time."""
    status: Optional[Union[str, "_models.WorkflowStatus"]] = rest_field(visibility=["read"])
    """Gets the status. Known values are: \"NotSpecified\", \"Paused\", \"Running\", \"Waiting\",
     \"Succeeded\", \"Skipped\", \"Suspended\", \"Cancelled\", \"Failed\", \"Faulted\",
     \"TimedOut\", \"Aborted\", and \"Ignored\"."""
    code: Optional[str] = rest_field(visibility=["read"])
    """Gets the code."""
    error: Optional[Any] = rest_field(visibility=["read"])
    """Gets the error."""
    tracking_id: Optional[str] = rest_field(name="trackingId", visibility=["read"])
    """Gets the tracking id."""
    correlation: Optional["_models.Correlation"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The run correlation."""
    inputs_link: Optional["_models.ContentLink"] = rest_field(name="inputsLink", visibility=["read"])
    """Gets the link to input parameters."""
    outputs_link: Optional["_models.ContentLink"] = rest_field(name="outputsLink", visibility=["read"])
    """Gets the link to output parameters."""
    fired: Optional[bool] = rest_field(visibility=["read"])
    """The value indicating whether trigger was fired."""
    run: Optional["_models.ResourceReference"] = rest_field(visibility=["read"])
    """Gets the reference to workflow run."""

    @overload
    def __init__(
        self,
        *,
        correlation: Optional["_models.Correlation"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowTriggerListCallbackUrlQueries(_Model):
    """Gets the workflow trigger callback URL query parameters.

    :ivar api_version: The api version.
    :vartype api_version: str
    :ivar sp: The SAS permissions.
    :vartype sp: str
    :ivar sv: The SAS version.
    :vartype sv: str
    :ivar sig: The SAS signature.
    :vartype sig: str
    :ivar se: The SAS timestamp.
    :vartype se: str
    """

    api_version: Optional[str] = rest_field(
        name="api-version", visibility=["read", "create", "update", "delete", "query"]
    )
    """The api version."""
    sp: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The SAS permissions."""
    sv: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The SAS version."""
    sig: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The SAS signature."""
    se: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The SAS timestamp."""

    @overload
    def __init__(
        self,
        *,
        api_version: Optional[str] = None,
        sp: Optional[str] = None,
        sv: Optional[str] = None,
        sig: Optional[str] = None,
        se: Optional[str] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowTriggerProperties(_Model):
    """The workflow trigger properties.

    :ivar provisioning_state: Gets the provisioning state. Known values are: "NotSpecified",
     "Accepted", "Running", "Ready", "Creating", "Created", "Deleting", "Deleted", "Canceled",
     "Failed", "Succeeded", "Moving", "Updating", "Registering", "Registered", "Unregistering",
     "Unregistered", and "Completed".
    :vartype provisioning_state: str or ~azure.mgmt.web.models.WorkflowTriggerProvisioningState
    :ivar created_time: Gets the created time.
    :vartype created_time: ~datetime.datetime
    :ivar changed_time: Gets the changed time.
    :vartype changed_time: ~datetime.datetime
    :ivar state: Gets the state. Known values are: "NotSpecified", "Completed", "Enabled",
     "Disabled", "Deleted", and "Suspended".
    :vartype state: str or ~azure.mgmt.web.models.WorkflowState
    :ivar status: Gets the status. Known values are: "NotSpecified", "Paused", "Running",
     "Waiting", "Succeeded", "Skipped", "Suspended", "Cancelled", "Failed", "Faulted", "TimedOut",
     "Aborted", and "Ignored".
    :vartype status: str or ~azure.mgmt.web.models.WorkflowStatus
    :ivar last_execution_time: Gets the last execution time.
    :vartype last_execution_time: ~datetime.datetime
    :ivar next_execution_time: Gets the next execution time.
    :vartype next_execution_time: ~datetime.datetime
    :ivar recurrence: Gets the workflow trigger recurrence.
    :vartype recurrence: ~azure.mgmt.web.models.WorkflowTriggerRecurrence
    :ivar workflow: Gets the reference to workflow.
    :vartype workflow: ~azure.mgmt.web.models.ResourceReference
    """

    provisioning_state: Optional[Union[str, "_models.WorkflowTriggerProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read"]
    )
    """Gets the provisioning state. Known values are: \"NotSpecified\", \"Accepted\", \"Running\",
     \"Ready\", \"Creating\", \"Created\", \"Deleting\", \"Deleted\", \"Canceled\", \"Failed\",
     \"Succeeded\", \"Moving\", \"Updating\", \"Registering\", \"Registered\", \"Unregistering\",
     \"Unregistered\", and \"Completed\"."""
    created_time: Optional[datetime.datetime] = rest_field(name="createdTime", visibility=["read"], format="rfc3339")
    """Gets the created time."""
    changed_time: Optional[datetime.datetime] = rest_field(name="changedTime", visibility=["read"], format="rfc3339")
    """Gets the changed time."""
    state: Optional[Union[str, "_models.WorkflowState"]] = rest_field(visibility=["read"])
    """Gets the state. Known values are: \"NotSpecified\", \"Completed\", \"Enabled\", \"Disabled\",
     \"Deleted\", and \"Suspended\"."""
    status: Optional[Union[str, "_models.WorkflowStatus"]] = rest_field(visibility=["read"])
    """Gets the status. Known values are: \"NotSpecified\", \"Paused\", \"Running\", \"Waiting\",
     \"Succeeded\", \"Skipped\", \"Suspended\", \"Cancelled\", \"Failed\", \"Faulted\",
     \"TimedOut\", \"Aborted\", and \"Ignored\"."""
    last_execution_time: Optional[datetime.datetime] = rest_field(
        name="lastExecutionTime", visibility=["read"], format="rfc3339"
    )
    """Gets the last execution time."""
    next_execution_time: Optional[datetime.datetime] = rest_field(
        name="nextExecutionTime", visibility=["read"], format="rfc3339"
    )
    """Gets the next execution time."""
    recurrence: Optional["_models.WorkflowTriggerRecurrence"] = rest_field(visibility=["read"])
    """Gets the workflow trigger recurrence."""
    workflow: Optional["_models.ResourceReference"] = rest_field(visibility=["read"])
    """Gets the reference to workflow."""


class WorkflowTriggerRecurrence(_Model):
    """The workflow trigger recurrence.

    :ivar frequency: The frequency. Known values are: "NotSpecified", "Second", "Minute", "Hour",
     "Day", "Week", "Month", and "Year".
    :vartype frequency: str or ~azure.mgmt.web.models.RecurrenceFrequency
    :ivar interval: The interval.
    :vartype interval: int
    :ivar start_time: The start time.
    :vartype start_time: str
    :ivar end_time: The end time.
    :vartype end_time: str
    :ivar time_zone: The time zone.
    :vartype time_zone: str
    :ivar schedule: The recurrence schedule.
    :vartype schedule: ~azure.mgmt.web.models.RecurrenceSchedule
    """

    frequency: Optional[Union[str, "_models.RecurrenceFrequency"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The frequency. Known values are: \"NotSpecified\", \"Second\", \"Minute\", \"Hour\", \"Day\",
     \"Week\", \"Month\", and \"Year\"."""
    interval: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The interval."""
    start_time: Optional[str] = rest_field(name="startTime", visibility=["read", "create", "update", "delete", "query"])
    """The start time."""
    end_time: Optional[str] = rest_field(name="endTime", visibility=["read", "create", "update", "delete", "query"])
    """The end time."""
    time_zone: Optional[str] = rest_field(name="timeZone", visibility=["read", "create", "update", "delete", "query"])
    """The time zone."""
    schedule: Optional["_models.RecurrenceSchedule"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The recurrence schedule."""

    @overload
    def __init__(
        self,
        *,
        frequency: Optional[Union[str, "_models.RecurrenceFrequency"]] = None,
        interval: Optional[int] = None,
        start_time: Optional[str] = None,
        end_time: Optional[str] = None,
        time_zone: Optional[str] = None,
        schedule: Optional["_models.RecurrenceSchedule"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)


class WorkflowVersion(TrackedResource):
    """The workflow version.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: ~azure.mgmt.web.models.SystemData
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: The workflow version properties.
    :vartype properties: ~azure.mgmt.web.models.WorkflowVersionProperties
    """

    properties: Optional["_models.WorkflowVersionProperties"] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The workflow version properties."""

    __flattened_items = [
        "provisioning_state",
        "created_time",
        "changed_time",
        "state",
        "version",
        "access_endpoint",
        "endpoints_configuration",
        "access_control",
        "sku",
        "integration_account",
        "definition",
        "parameters",
    ]

    @overload
    def __init__(
        self,
        *,
        location: str,
        tags: Optional[dict[str, str]] = None,
        properties: Optional["_models.WorkflowVersionProperties"] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        _flattened_input = {k: kwargs.pop(k) for k in kwargs.keys() & self.__flattened_items}
        super().__init__(*args, **kwargs)
        for k, v in _flattened_input.items():
            setattr(self, k, v)

    def __getattr__(self, name: str) -> Any:
        if name in self.__flattened_items:
            if self.properties is None:
                return None
            return getattr(self.properties, name)
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")

    def __setattr__(self, key: str, value: Any) -> None:
        if key in self.__flattened_items:
            if self.properties is None:
                self.properties = self._attr_to_rest_field["properties"]._class_type()
            setattr(self.properties, key, value)
        else:
            super().__setattr__(key, value)


class WorkflowVersionProperties(_Model):
    """The workflow version properties.

    :ivar provisioning_state: The provisioning state. Known values are: "NotSpecified", "Accepted",
     "Running", "Ready", "Creating", "Created", "Deleting", "Deleted", "Canceled", "Failed",
     "Succeeded", "Moving", "Updating", "Registering", "Registered", "Unregistering",
     "Unregistered", "Completed", "Renewing", "Pending", "Waiting", and "InProgress".
    :vartype provisioning_state: str or ~azure.mgmt.web.models.WorkflowProvisioningState
    :ivar created_time: Gets the created time.
    :vartype created_time: ~datetime.datetime
    :ivar changed_time: Gets the changed time.
    :vartype changed_time: ~datetime.datetime
    :ivar state: The state. Known values are: "NotSpecified", "Completed", "Enabled", "Disabled",
     "Deleted", and "Suspended".
    :vartype state: str or ~azure.mgmt.web.models.WorkflowState
    :ivar version: Gets the version.
    :vartype version: str
    :ivar access_endpoint: Gets the access endpoint.
    :vartype access_endpoint: str
    :ivar endpoints_configuration: The endpoints configuration.
    :vartype endpoints_configuration: ~azure.mgmt.web.models.FlowEndpointsConfiguration
    :ivar access_control: The access control configuration.
    :vartype access_control: ~azure.mgmt.web.models.FlowAccessControlConfiguration
    :ivar sku: The sku.
    :vartype sku: ~azure.mgmt.web.models.WorkflowSku
    :ivar integration_account: The integration account.
    :vartype integration_account: ~azure.mgmt.web.models.ResourceReference
    :ivar definition: The definition.
    :vartype definition: any
    :ivar parameters: The parameters.
    :vartype parameters: dict[str, ~azure.mgmt.web.models.WorkflowParameter]
    """

    provisioning_state: Optional[Union[str, "_models.WorkflowProvisioningState"]] = rest_field(
        name="provisioningState", visibility=["read"]
    )
    """The provisioning state. Known values are: \"NotSpecified\", \"Accepted\", \"Running\",
     \"Ready\", \"Creating\", \"Created\", \"Deleting\", \"Deleted\", \"Canceled\", \"Failed\",
     \"Succeeded\", \"Moving\", \"Updating\", \"Registering\", \"Registered\", \"Unregistering\",
     \"Unregistered\", \"Completed\", \"Renewing\", \"Pending\", \"Waiting\", and \"InProgress\"."""
    created_time: Optional[datetime.datetime] = rest_field(name="createdTime", visibility=["read"], format="rfc3339")
    """Gets the created time."""
    changed_time: Optional[datetime.datetime] = rest_field(name="changedTime", visibility=["read"], format="rfc3339")
    """Gets the changed time."""
    state: Optional[Union[str, "_models.WorkflowState"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The state. Known values are: \"NotSpecified\", \"Completed\", \"Enabled\", \"Disabled\",
     \"Deleted\", and \"Suspended\"."""
    version: Optional[str] = rest_field(visibility=["read"])
    """Gets the version."""
    access_endpoint: Optional[str] = rest_field(name="accessEndpoint", visibility=["read"])
    """Gets the access endpoint."""
    endpoints_configuration: Optional["_models.FlowEndpointsConfiguration"] = rest_field(
        name="endpointsConfiguration", visibility=["read", "create", "update", "delete", "query"]
    )
    """The endpoints configuration."""
    access_control: Optional["_models.FlowAccessControlConfiguration"] = rest_field(
        name="accessControl", visibility=["read", "create", "update", "delete", "query"]
    )
    """The access control configuration."""
    sku: Optional["_models.WorkflowSku"] = rest_field(visibility=["read"])
    """The sku."""
    integration_account: Optional["_models.ResourceReference"] = rest_field(
        name="integrationAccount", visibility=["read", "create", "update", "delete", "query"]
    )
    """The integration account."""
    definition: Optional[Any] = rest_field(visibility=["read", "create", "update", "delete", "query"])
    """The definition."""
    parameters: Optional[dict[str, "_models.WorkflowParameter"]] = rest_field(
        visibility=["read", "create", "update", "delete", "query"]
    )
    """The parameters."""

    @overload
    def __init__(
        self,
        *,
        state: Optional[Union[str, "_models.WorkflowState"]] = None,
        endpoints_configuration: Optional["_models.FlowEndpointsConfiguration"] = None,
        access_control: Optional["_models.FlowAccessControlConfiguration"] = None,
        integration_account: Optional["_models.ResourceReference"] = None,
        definition: Optional[Any] = None,
        parameters: Optional[dict[str, "_models.WorkflowParameter"]] = None,
    ) -> None: ...

    @overload
    def __init__(self, mapping: Mapping[str, Any]) -> None:
        """
        :param mapping: raw JSON to initialize the model.
        :type mapping: Mapping[str, Any]
        """

    def __init__(self, *args: Any, **kwargs: Any) -> None:
        super().__init__(*args, **kwargs)
