# Source code for azure.mgmt.cdn.operations._cdn_management_client_operations

    # 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 msrest.pipeline import ClientRawResponse
    from msrestazure.azure_exceptions import CloudError
    from msrest.polling import LROPoller, NoPolling
    from msrestazure.polling.arm_polling import ARMPolling
    from .. import models
    import uuid

    class CdnManagementClientOperationsMixin(object):

        def check_name_availability(
                self, name, custom_headers=None, raw=False, **operation_config):
            """Check the availability of a resource name. This is needed for resources
            where name is globally unique, such as a CDN endpoint.

            :param name: The resource name to validate.
            :type name: str
            :param dict custom_headers: headers that will be added to the request
            :param bool raw: returns the direct response alongside the
             deserialized response
            :param operation_config: :ref:`Operation configuration
             overrides<msrest:optionsforoperations>`.
            :return: CheckNameAvailabilityOutput or ClientRawResponse if raw=true
            :rtype: ~azure.mgmt.cdn.models.CheckNameAvailabilityOutput or
             ~msrest.pipeline.ClientRawResponse
            :raises:
             :class:`ErrorResponseException<azure.mgmt.cdn.models.ErrorResponseException>`
            """
            check_name_availability_input = models.CheckNameAvailabilityInput(name=name)

            # Construct URL
            url = self.check_name_availability.metadata['url']

            # Construct parameters
            query_parameters = {}
            query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')

            # Construct headers
            header_parameters = {}
            header_parameters['Accept'] = 'application/json'
            header_parameters['Content-Type'] = 'application/json; charset=utf-8'
            if self.config.generate_client_request_id:
                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
            if custom_headers:
                header_parameters.update(custom_headers)
            if self.config.accept_language is not None:
                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')

            # Construct body
            body_content = self._serialize.body(check_name_availability_input, 'CheckNameAvailabilityInput')

            # Construct and send request
            request = self._client.post(url, query_parameters, header_parameters, body_content)
            response = self._client.send(request, stream=False, **operation_config)

            if response.status_code not in [200]:
                raise models.ErrorResponseException(self._deserialize, response)

            deserialized = None
            if response.status_code == 200:
                deserialized = self._deserialize('CheckNameAvailabilityOutput', response)

            if raw:
                client_raw_response = ClientRawResponse(deserialized, response)
                return client_raw_response

            return deserialized
        check_name_availability.metadata = {'url': '/providers/Microsoft.Cdn/checkNameAvailability'}

        def check_name_availability_with_subscription(
                self, name, custom_headers=None, raw=False, **operation_config):
            """Check the availability of a resource name. This is needed for resources
            where name is globally unique, such as a CDN endpoint.

            :param name: The resource name to validate.
            :type name: str
            :param dict custom_headers: headers that will be added to the request
            :param bool raw: returns the direct response alongside the
             deserialized response
            :param operation_config: :ref:`Operation configuration
             overrides<msrest:optionsforoperations>`.
            :return: CheckNameAvailabilityOutput or ClientRawResponse if raw=true
            :rtype: ~azure.mgmt.cdn.models.CheckNameAvailabilityOutput or
             ~msrest.pipeline.ClientRawResponse
            :raises:
             :class:`ErrorResponseException<azure.mgmt.cdn.models.ErrorResponseException>`
            """
            check_name_availability_input = models.CheckNameAvailabilityInput(name=name)

            # Construct URL
            url = self.check_name_availability_with_subscription.metadata['url']
            path_format_arguments = {
                'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
            }
            url = self._client.format_url(url, **path_format_arguments)

            # Construct parameters
            query_parameters = {}
            query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')

            # Construct headers
            header_parameters = {}
            header_parameters['Accept'] = 'application/json'
            header_parameters['Content-Type'] = 'application/json; charset=utf-8'
            if self.config.generate_client_request_id:
                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
            if custom_headers:
                header_parameters.update(custom_headers)
            if self.config.accept_language is not None:
                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')

            # Construct body
            body_content = self._serialize.body(check_name_availability_input, 'CheckNameAvailabilityInput')

            # Construct and send request
            request = self._client.post(url, query_parameters, header_parameters, body_content)
            response = self._client.send(request, stream=False, **operation_config)

            if response.status_code not in [200]:
                raise models.ErrorResponseException(self._deserialize, response)

            deserialized = None
            if response.status_code == 200:
                deserialized = self._deserialize('CheckNameAvailabilityOutput', response)

            if raw:
                client_raw_response = ClientRawResponse(deserialized, response)
                return client_raw_response

            return deserialized
        check_name_availability_with_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Cdn/checkNameAvailability'}

        def validate_probe(
                self, probe_url, custom_headers=None, raw=False, **operation_config):
            """Check if the probe path is a valid path and the file can be accessed.
            Probe path is the path to a file hosted on the origin server to help
            accelerate the delivery of dynamic content via the CDN endpoint. This
            path is relative to the origin path specified in the endpoint
            configuration.

            :param probe_url: The probe URL to validate.
            :type probe_url: str
            :param dict custom_headers: headers that will be added to the request
            :param bool raw: returns the direct response alongside the
             deserialized response
            :param operation_config: :ref:`Operation configuration
             overrides<msrest:optionsforoperations>`.
            :return: ValidateProbeOutput or ClientRawResponse if raw=true
            :rtype: ~azure.mgmt.cdn.models.ValidateProbeOutput or
             ~msrest.pipeline.ClientRawResponse
            :raises:
             :class:`ErrorResponseException<azure.mgmt.cdn.models.ErrorResponseException>`
            """
            validate_probe_input = models.ValidateProbeInput(probe_url=probe_url)

            # Construct URL
            url = self.validate_probe.metadata['url']
            path_format_arguments = {
                'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
            }
            url = self._client.format_url(url, **path_format_arguments)

            # Construct parameters
            query_parameters = {}
            query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')

            # Construct headers
            header_parameters = {}
            header_parameters['Accept'] = 'application/json'
            header_parameters['Content-Type'] = 'application/json; charset=utf-8'
            if self.config.generate_client_request_id:
                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
            if custom_headers:
                header_parameters.update(custom_headers)
            if self.config.accept_language is not None:
                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')

            # Construct body
            body_content = self._serialize.body(validate_probe_input, 'ValidateProbeInput')

            # Construct and send request
            request = self._client.post(url, query_parameters, header_parameters, body_content)
            response = self._client.send(request, stream=False, **operation_config)

            if response.status_code not in [200]:
                raise models.ErrorResponseException(self._deserialize, response)

            deserialized = None
            if response.status_code == 200:
                deserialized = self._deserialize('ValidateProbeOutput', response)

            if raw:
                client_raw_response = ClientRawResponse(deserialized, response)
                return client_raw_response

            return deserialized
        validate_probe.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Cdn/validateProbe'}