1# coding=utf-8
2# --------------------------------------------------------------------------
3# Copyright (c) Microsoft Corporation. All rights reserved.
4# Licensed under the MIT License. See License.txt in the project root for
5# license information.
6#
7# Code generated by Microsoft (R) AutoRest Code Generator.
8# Changes may cause incorrect behavior and will be lost if the code is
9# regenerated.
10# --------------------------------------------------------------------------
11
12import uuid
13from msrest.pipeline import ClientRawResponse
14
15from .. import models
16
17
18class ApiRevisionOperations(object):
19    """ApiRevisionOperations operations.
20
21    You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute.
22
23    :param client: Client for service requests.
24    :param config: Configuration of service client.
25    :param serializer: An object model serializer.
26    :param deserializer: An object model deserializer.
27    :ivar api_version: Version of the API to be used with the client request. Constant value: "2019-12-01".
28    """
29
30    models = models
31
32    def __init__(self, client, config, serializer, deserializer):
33
34        self._client = client
35        self._serialize = serializer
36        self._deserialize = deserializer
37        self.api_version = "2019-12-01"
38
39        self.config = config
40
41    def list_by_service(
42            self, resource_group_name, service_name, api_id, filter=None, top=None, skip=None, custom_headers=None, raw=False, **operation_config):
43        """Lists all revisions of an API.
44
45        :param resource_group_name: The name of the resource group.
46        :type resource_group_name: str
47        :param service_name: The name of the API Management service.
48        :type service_name: str
49        :param api_id: API identifier. Must be unique in the current API
50         Management service instance.
51        :type api_id: str
52        :param filter: |   Field     |     Usage     |     Supported operators
53         |     Supported functions
54         |</br>|-------------|-------------|-------------|-------------|</br>|
55         apiRevision | filter | ge, le, eq, ne, gt, lt | substringof, contains,
56         startswith, endswith | </br>
57        :type filter: str
58        :param top: Number of records to return.
59        :type top: int
60        :param skip: Number of records to skip.
61        :type skip: int
62        :param dict custom_headers: headers that will be added to the request
63        :param bool raw: returns the direct response alongside the
64         deserialized response
65        :param operation_config: :ref:`Operation configuration
66         overrides<msrest:optionsforoperations>`.
67        :return: An iterator like instance of ApiRevisionContract
68        :rtype:
69         ~azure.mgmt.apimanagement.models.ApiRevisionContractPaged[~azure.mgmt.apimanagement.models.ApiRevisionContract]
70        :raises:
71         :class:`ErrorResponseException<azure.mgmt.apimanagement.models.ErrorResponseException>`
72        """
73        def prepare_request(next_link=None):
74            if not next_link:
75                # Construct URL
76                url = self.list_by_service.metadata['url']
77                path_format_arguments = {
78                    'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'),
79                    'serviceName': self._serialize.url("service_name", service_name, 'str', max_length=50, min_length=1, pattern=r'^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$'),
80                    'apiId': self._serialize.url("api_id", api_id, 'str', max_length=80, min_length=1),
81                    'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str')
82                }
83                url = self._client.format_url(url, **path_format_arguments)
84
85                # Construct parameters
86                query_parameters = {}
87                if filter is not None:
88                    query_parameters['$filter'] = self._serialize.query("filter", filter, 'str')
89                if top is not None:
90                    query_parameters['$top'] = self._serialize.query("top", top, 'int', minimum=1)
91                if skip is not None:
92                    query_parameters['$skip'] = self._serialize.query("skip", skip, 'int', minimum=0)
93                query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str')
94
95            else:
96                url = next_link
97                query_parameters = {}
98
99            # Construct headers
100            header_parameters = {}
101            header_parameters['Accept'] = 'application/json'
102            if self.config.generate_client_request_id:
103                header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
104            if custom_headers:
105                header_parameters.update(custom_headers)
106            if self.config.accept_language is not None:
107                header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')
108
109            # Construct and send request
110            request = self._client.get(url, query_parameters, header_parameters)
111            return request
112
113        def internal_paging(next_link=None):
114            request = prepare_request(next_link)
115
116            response = self._client.send(request, stream=False, **operation_config)
117
118            if response.status_code not in [200]:
119                raise models.ErrorResponseException(self._deserialize, response)
120
121            return response
122
123        # Deserialize response
124        header_dict = None
125        if raw:
126            header_dict = {}
127        deserialized = models.ApiRevisionContractPaged(internal_paging, self._deserialize.dependencies, header_dict)
128
129        return deserialized
130    list_by_service.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/revisions'}
131