text: # 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 typing import TYPE_CHECKING
  import warnings
  
  from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error
  from azure.core.paging import ItemPaged
  from azure.core.pipeline import PipelineResponse
  from azure.core.pipeline.transport import HttpRequest, HttpResponse
  from azure.mgmt.core.exceptions import ARMErrorFormat
  
  from .. import models as _models
  
  if TYPE_CHECKING:
      # pylint: disable=unused-import,ungrouped-imports
      from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar
  
      T = TypeVar('T')
      ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]]
  
  class JobsOperations(object):
      """JobsOperations operations.
  
      You should not instantiate this class directly. Instead, you should create a Client instance that
      instantiates it for you and attaches it as an attribute.
  
      :ivar models: Alias to model classes used in this operation group.
      :type models: ~azure.mgmt.media.models
      :param client: Client for service requests.
      :param config: Configuration of service client.
      :param serializer: An object model serializer.
      :param deserializer: An object model deserializer.
      """
  
      models = _models
  
      def __init__(self, client, config, serializer, deserializer):
          self._client = client
          self._serialize = serializer
          self._deserialize = deserializer
          self._config = config
  
      def list(
          self,
          resource_group_name,  # type: str
          account_name,  # type: str
          transform_name,  # type: str
          filter=None,  # type: Optional[str]
          orderby=None,  # type: Optional[str]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["_models.JobCollection"]
          """List Jobs.
  
          Lists all of the Jobs for the Transform.
  
          :param resource_group_name: The name of the resource group within the Azure subscription.
          :type resource_group_name: str
          :param account_name: The Media Services account name.
          :type account_name: str
          :param transform_name: The Transform name.
          :type transform_name: str
          :param filter: Restricts the set of items returned.
          :type filter: str
          :param orderby: Specifies the key by which the result collection should be ordered.
          :type orderby: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either JobCollection or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.media.models.JobCollection]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["_models.JobCollection"]
          error_map = {
              401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError
          }
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "2021-06-01"
          accept = "application/json"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = self._serialize.header("accept", accept, 'str')
  
              if not next_link:
                  # Construct URL
                  url = self.list.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'),
                      'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
                      'accountName': self._serialize.url("account_name", account_name, 'str'),
                      'transformName': self._serialize.url("transform_name", transform_name, 'str'),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
                  if filter is not None:
                      query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
                  if orderby is not None:
                      query_parameters['$orderby'] = self._serialize.query("orderby", orderby, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('JobCollection', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.odata_next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Media/mediaServices/{accountName}/transforms/{transformName}/jobs'}  # type: ignore
  
      def get(
          self,
          resource_group_name,  # type: str
          account_name,  # type: str
          transform_name,  # type: str
          job_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "_models.Job"
          """Get Job.
  
          Gets a Job.
  
          :param resource_group_name: The name of the resource group within the Azure subscription.
          :type resource_group_name: str
          :param account_name: The Media Services account name.
          :type account_name: str
          :param transform_name: The Transform name.
          :type transform_name: str
          :param job_name: The Job name.
          :type job_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: Job, or the result of cls(response)
          :rtype: ~azure.mgmt.media.models.Job
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["_models.Job"]
          error_map = {
              401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError
          }
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "2021-06-01"
          accept = "application/json"
  
          # Construct URL
          url = self.get.metadata['url']  # type: ignore
          path_format_arguments = {
              'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'),
              'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
              'accountName': self._serialize.url("account_name", account_name, 'str'),
              'transformName': self._serialize.url("transform_name", transform_name, 'str'),
              'jobName': self._serialize.url("job_name", job_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = self._serialize.header("accept", accept, 'str')
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, response)
              raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat)
  
          deserialized = self._deserialize('Job', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Media/mediaServices/{accountName}/transforms/{transformName}/jobs/{jobName}'}  # type: ignore
  
      def create(
          self,
          resource_group_name,  # type: str
          account_name,  # type: str
          transform_name,  # type: str
          job_name,  # type: str
          parameters,  # type: "_models.Job"
          **kwargs  # type: Any
      ):
          # type: (...) -> "_models.Job"
          """Create Job.
  
          Creates a Job.
  
          :param resource_group_name: The name of the resource group within the Azure subscription.
          :type resource_group_name: str
          :param account_name: The Media Services account name.
          :type account_name: str
          :param transform_name: The Transform name.
          :type transform_name: str
          :param job_name: The Job name.
          :type job_name: str
          :param parameters: The request parameters.
          :type parameters: ~azure.mgmt.media.models.Job
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: Job, or the result of cls(response)
          :rtype: ~azure.mgmt.media.models.Job
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["_models.Job"]
          error_map = {
              401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError
          }
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "2021-06-01"
          content_type = kwargs.pop("content_type", "application/json")
          accept = "application/json"
  
          # Construct URL
          url = self.create.metadata['url']  # type: ignore
          path_format_arguments = {
              'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'),
              'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
              'accountName': self._serialize.url("account_name", account_name, 'str'),
              'transformName': self._serialize.url("transform_name", transform_name, 'str'),
              'jobName': self._serialize.url("job_name", job_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = self._serialize.header("accept", accept, 'str')
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'Job')
          body_content_kwargs['content'] = body_content
          request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [201]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, response)
              raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat)
  
          deserialized = self._deserialize('Job', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Media/mediaServices/{accountName}/transforms/{transformName}/jobs/{jobName}'}  # type: ignore
  
      def delete(
          self,
          resource_group_name,  # type: str
          account_name,  # type: str
          transform_name,  # type: str
          job_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> None
          """Delete Job.
  
          Deletes a Job.
  
          :param resource_group_name: The name of the resource group within the Azure subscription.
          :type resource_group_name: str
          :param account_name: The Media Services account name.
          :type account_name: str
          :param transform_name: The Transform name.
          :type transform_name: str
          :param job_name: The Job name.
          :type job_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: None, or the result of cls(response)
          :rtype: None
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType[None]
          error_map = {
              401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError
          }
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "2021-06-01"
          accept = "application/json"
  
          # Construct URL
          url = self.delete.metadata['url']  # type: ignore
          path_format_arguments = {
              'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'),
              'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
              'accountName': self._serialize.url("account_name", account_name, 'str'),
              'transformName': self._serialize.url("transform_name", transform_name, 'str'),
              'jobName': self._serialize.url("job_name", job_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = self._serialize.header("accept", accept, 'str')
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200, 204]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, response)
              raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat)
  
          if cls:
              return cls(pipeline_response, None, {})
  
      delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Media/mediaServices/{accountName}/transforms/{transformName}/jobs/{jobName}'}  # type: ignore
  
      def update(
          self,
          resource_group_name,  # type: str
          account_name,  # type: str
          transform_name,  # type: str
          job_name,  # type: str
          parameters,  # type: "_models.Job"
          **kwargs  # type: Any
      ):
          # type: (...) -> "_models.Job"
          """Update Job.
  
          Update is only supported for description and priority. Updating Priority will take effect when
          the Job state is Queued or Scheduled and depending on the timing the priority update may be
          ignored.
  
          :param resource_group_name: The name of the resource group within the Azure subscription.
          :type resource_group_name: str
          :param account_name: The Media Services account name.
          :type account_name: str
          :param transform_name: The Transform name.
          :type transform_name: str
          :param job_name: The Job name.
          :type job_name: str
          :param parameters: The request parameters.
          :type parameters: ~azure.mgmt.media.models.Job
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: Job, or the result of cls(response)
          :rtype: ~azure.mgmt.media.models.Job
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["_models.Job"]
          error_map = {
              401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError
          }
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "2021-06-01"
          content_type = kwargs.pop("content_type", "application/json")
          accept = "application/json"
  
          # Construct URL
          url = self.update.metadata['url']  # type: ignore
          path_format_arguments = {
              'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'),
              'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
              'accountName': self._serialize.url("account_name", account_name, 'str'),
              'transformName': self._serialize.url("transform_name", transform_name, 'str'),
              'jobName': self._serialize.url("job_name", job_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = self._serialize.header("accept", accept, 'str')
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'Job')
          body_content_kwargs['content'] = body_content
          request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, response)
              raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat)
  
          deserialized = self._deserialize('Job', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Media/mediaServices/{accountName}/transforms/{transformName}/jobs/{jobName}'}  # type: ignore
  
      def cancel_job(
          self,
          resource_group_name,  # type: str
          account_name,  # type: str
          transform_name,  # type: str
          job_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> None
          """Cancel Job.
  
          Cancel a Job.
  
          :param resource_group_name: The name of the resource group within the Azure subscription.
          :type resource_group_name: str
          :param account_name: The Media Services account name.
          :type account_name: str
          :param transform_name: The Transform name.
          :type transform_name: str
          :param job_name: The Job name.
          :type job_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: None, or the result of cls(response)
          :rtype: None
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType[None]
          error_map = {
              401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError
          }
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "2021-06-01"
          accept = "application/json"
  
          # Construct URL
          url = self.cancel_job.metadata['url']  # type: ignore
          path_format_arguments = {
              'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'),
              'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
              'accountName': self._serialize.url("account_name", account_name, 'str'),
              'transformName': self._serialize.url("transform_name", transform_name, 'str'),
              'jobName': self._serialize.url("job_name", job_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = self._serialize.header("accept", accept, 'str')
  
          request = self._client.post(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, response)
              raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat)
  
          if cls:
              return cls(pipeline_response, None, {})
  
      cancel_job.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Media/mediaServices/{accountName}/transforms/{transformName}/jobs/{jobName}/cancelJob'}  # type: ignore
  