# 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) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.
# --------------------------------------------------------------------------

from .provision_application_type_description_base_py3 import ProvisionApplicationTypeDescriptionBase


class ExternalStoreProvisionApplicationTypeDescription(ProvisionApplicationTypeDescriptionBase):
    """Describes the operation to register or provision an application type using
    an application package from an external store instead of a package uploaded
    to the Service Fabric image store.

    All required parameters must be populated in order to send to Azure.

    :param async_property: Required. Indicates whether or not provisioning
     should occur asynchronously. When set to true, the provision operation
     returns when the request is accepted by the system, and the provision
     operation continues without any timeout limit. The default value is false.
     For large application packages, we recommend setting the value to true.
    :type async_property: bool
    :param kind: Required. Constant filled by server.
    :type kind: str
    :param application_package_download_uri: Required. The path to the
     '.sfpkg' application package from where the application package can be
     downloaded using HTTP or HTTPS protocols. The application package can be
     stored in an external store that provides GET operation to download the
     file. Supported protocols are HTTP and HTTPS, and the path must allow READ
     access.
    :type application_package_download_uri: str
    :param application_type_name: Required. The application type name
     represents the name of the application type found in the application
     manifest.
    :type application_type_name: str
    :param application_type_version: Required. The application type version
     represents the version of the application type found in the application
     manifest.
    :type application_type_version: str
    """

    _validation = {
        'async_property': {'required': True},
        'kind': {'required': True},
        'application_package_download_uri': {'required': True},
        'application_type_name': {'required': True},
        'application_type_version': {'required': True},
    }

    _attribute_map = {
        'async_property': {'key': 'Async', 'type': 'bool'},
        'kind': {'key': 'Kind', 'type': 'str'},
        'application_package_download_uri': {'key': 'ApplicationPackageDownloadUri', 'type': 'str'},
        'application_type_name': {'key': 'ApplicationTypeName', 'type': 'str'},
        'application_type_version': {'key': 'ApplicationTypeVersion', 'type': 'str'},
    }

    def __init__(self, *, async_property: bool, application_package_download_uri: str, application_type_name: str, application_type_version: str, **kwargs) -> None:
        super(ExternalStoreProvisionApplicationTypeDescription, self).__init__(async_property=async_property, **kwargs)
        self.application_package_download_uri = application_package_download_uri
        self.application_type_name = application_type_name
        self.application_type_version = application_type_version
        self.kind = 'ExternalStore'
