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.
  # --------------------------------------------------------------------------
  
  import uuid
  from msrest.pipeline import ClientRawResponse
  from msrestazure.azure_exceptions import CloudError
  
  from .. import models
  
  
  class DatabaseOperations(object):
      """DatabaseOperations operations.
  
      You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
  
      :param client: Client for service requests.
      :param config: Configuration of service client.
      :param serializer: An object model serializer.
      :param deserializer: An object model deserializer.
      :ivar api_version: Version of the API to be used with the client request. The current version is 2019-08-01. Constant value: "2019-08-01".
      """
  
      models = models
  
      def __init__(self, client, config, serializer, deserializer):
  
          self._client = client
          self._serialize = serializer
          self._deserialize = deserializer
          self.api_version = "2019-08-01"
  
          self.config = config
  
      def list_metrics(
              self, resource_group_name, account_name, database_rid, filter, custom_headers=None, raw=False, **operation_config):
          """Retrieves the metrics determined by the given filter for the given
          database account and database.
  
          :param resource_group_name: Name of an Azure resource group.
          :type resource_group_name: str
          :param account_name: Cosmos DB database account name.
          :type account_name: str
          :param database_rid: Cosmos DB database rid.
          :type database_rid: str
          :param filter: An OData filter expression that describes a subset of
           metrics to return. The parameters that can be filtered are name.value
           (name of the metric, can have an or of multiple names), startTime,
           endTime, and timeGrain. The supported operator is eq.
          :type filter: 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: An iterator like instance of Metric
          :rtype:
           ~azure.mgmt.cosmosdb.models.MetricPaged[~azure.mgmt.cosmosdb.models.Metric]
          :raises: :class:`CloudError<msrestazure.azure_exceptions.CloudError>`
          """
          def prepare_request(next_link=None):
              if not next_link:
                  # Construct URL
                  url = self.list_metrics.metadata['url']
                  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', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'),
                      'accountName': self._serialize.url("account_name", account_name, 'str', max_length=50, min_length=3, pattern=r'^[a-z0-9]+(-[a-z0-9]+)*'),
                      'databaseRid': self._serialize.url("database_rid", database_rid, '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')
                  query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
  
              else:
                  url = next_link
                  query_parameters = {}
  
              # Construct headers
              header_parameters = {}
              header_parameters['Accept'] = 'application/json'
              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 and send request
              request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def internal_paging(next_link=None):
              request = prepare_request(next_link)
  
              response = self._client.send(request, stream=False, **operation_config)
  
              if response.status_code not in [200]:
                  exp = CloudError(response)
                  exp.request_id = response.headers.get('x-ms-request-id')
                  raise exp
  
              return response
  
          # Deserialize response
          header_dict = None
          if raw:
              header_dict = {}
          deserialized = models.MetricPaged(internal_paging, self._deserialize.dependencies, header_dict)
  
          return deserialized
      list_metrics.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/{accountName}/databases/{databaseRid}/metrics'}
  
      def list_usages(
              self, resource_group_name, account_name, database_rid, filter=None, custom_headers=None, raw=False, **operation_config):
          """Retrieves the usages (most recent data) for the given database.
  
          :param resource_group_name: Name of an Azure resource group.
          :type resource_group_name: str
          :param account_name: Cosmos DB database account name.
          :type account_name: str
          :param database_rid: Cosmos DB database rid.
          :type database_rid: str
          :param filter: An OData filter expression that describes a subset of
           usages to return. The supported parameter is name.value (name of the
           metric, can have an or of multiple names).
          :type filter: 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: An iterator like instance of Usage
          :rtype:
           ~azure.mgmt.cosmosdb.models.UsagePaged[~azure.mgmt.cosmosdb.models.Usage]
          :raises: :class:`CloudError<msrestazure.azure_exceptions.CloudError>`
          """
          def prepare_request(next_link=None):
              if not next_link:
                  # Construct URL
                  url = self.list_usages.metadata['url']
                  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', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'),
                      'accountName': self._serialize.url("account_name", account_name, 'str', max_length=50, min_length=3, pattern=r'^[a-z0-9]+(-[a-z0-9]+)*'),
                      'databaseRid': self._serialize.url("database_rid", database_rid, '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')
                  if filter is not None:
                      query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
  
              else:
                  url = next_link
                  query_parameters = {}
  
              # Construct headers
              header_parameters = {}
              header_parameters['Accept'] = 'application/json'
              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 and send request
              request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def internal_paging(next_link=None):
              request = prepare_request(next_link)
  
              response = self._client.send(request, stream=False, **operation_config)
  
              if response.status_code not in [200]:
                  exp = CloudError(response)
                  exp.request_id = response.headers.get('x-ms-request-id')
                  raise exp
  
              return response
  
          # Deserialize response
          header_dict = None
          if raw:
              header_dict = {}
          deserialized = models.UsagePaged(internal_paging, self._deserialize.dependencies, header_dict)
  
          return deserialized
      list_usages.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/{accountName}/databases/{databaseRid}/usages'}
  
      def list_metric_definitions(
              self, resource_group_name, account_name, database_rid, custom_headers=None, raw=False, **operation_config):
          """Retrieves metric definitions for the given database.
  
          :param resource_group_name: Name of an Azure resource group.
          :type resource_group_name: str
          :param account_name: Cosmos DB database account name.
          :type account_name: str
          :param database_rid: Cosmos DB database rid.
          :type database_rid: 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: An iterator like instance of MetricDefinition
          :rtype:
           ~azure.mgmt.cosmosdb.models.MetricDefinitionPaged[~azure.mgmt.cosmosdb.models.MetricDefinition]
          :raises: :class:`CloudError<msrestazure.azure_exceptions.CloudError>`
          """
          def prepare_request(next_link=None):
              if not next_link:
                  # Construct URL
                  url = self.list_metric_definitions.metadata['url']
                  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', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'),
                      'accountName': self._serialize.url("account_name", account_name, 'str', max_length=50, min_length=3, pattern=r'^[a-z0-9]+(-[a-z0-9]+)*'),
                      'databaseRid': self._serialize.url("database_rid", database_rid, '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')
  
              else:
                  url = next_link
                  query_parameters = {}
  
              # Construct headers
              header_parameters = {}
              header_parameters['Accept'] = 'application/json'
              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 and send request
              request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def internal_paging(next_link=None):
              request = prepare_request(next_link)
  
              response = self._client.send(request, stream=False, **operation_config)
  
              if response.status_code not in [200]:
                  exp = CloudError(response)
                  exp.request_id = response.headers.get('x-ms-request-id')
                  raise exp
  
              return response
  
          # Deserialize response
          header_dict = None
          if raw:
              header_dict = {}
          deserialized = models.MetricDefinitionPaged(internal_paging, self._deserialize.dependencies, header_dict)
  
          return deserialized
      list_metric_definitions.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/{accountName}/databases/{databaseRid}/metricDefinitions'}
  