Skip to content

Commit 40453b1

Browse files
iscai-msftAutorestCImsyyc
authored
patch next link for vaults list (Azure#31272)
* patch next link for vaults list * Packaging update of azure-mgmt-keyvault * fix for py3.7 * update version --------- Co-authored-by: Azure SDK Bot <[email protected]> Co-authored-by: msyyc <[email protected]>
1 parent 9ae2490 commit 40453b1

File tree

31 files changed

+2330
-97
lines changed

31 files changed

+2330
-97
lines changed

sdk/keyvault/azure-mgmt-keyvault/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Release History
22

3+
## 10.2.3 (2023-07-25)
4+
5+
### Bugs Fixed
6+
7+
- Do not use configured api_version to relpace the value in nextLink for `VaultsOperation.list`
8+
39
## 10.2.2 (2023-05-24)
410

511
### Other Changes

sdk/keyvault/azure-mgmt-keyvault/azure/mgmt/keyvault/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
# license information.
66
# --------------------------------------------------------------------------
77

8-
VERSION = "10.2.2"
8+
VERSION = "10.2.3"

sdk/keyvault/azure-mgmt-keyvault/azure/mgmt/keyvault/v2016_10_01/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
77
# --------------------------------------------------------------------------
88

9-
VERSION = "10.2.2"
9+
VERSION = "10.2.3"

sdk/keyvault/azure-mgmt-keyvault/azure/mgmt/keyvault/v2016_10_01/aio/operations/_patch.py

Lines changed: 126 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,133 @@
66
77
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
88
"""
9-
from typing import List
9+
import sys
10+
from typing import AsyncIterable, Any, Optional, List
11+
import urllib.parse
1012

11-
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
13+
from azure.core.async_paging import AsyncItemPaged, AsyncList
14+
from azure.core.exceptions import (
15+
ClientAuthenticationError,
16+
HttpResponseError,
17+
ResourceExistsError,
18+
ResourceNotFoundError,
19+
ResourceNotModifiedError,
20+
map_error,
21+
)
22+
from azure.core.pipeline import PipelineResponse
23+
from azure.core.rest import HttpRequest
24+
from azure.core.tracing.decorator import distributed_trace
25+
from azure.core.utils import case_insensitive_dict
26+
from azure.mgmt.core.exceptions import ARMErrorFormat
27+
28+
from ... import models as _models
29+
from ..._vendor import _convert_request
30+
from ._vaults_operations import VaultsOperations as _VaultsOperations, ClsType
31+
from ...operations._vaults_operations import build_list_request
32+
33+
if sys.version_info >= (3, 8):
34+
from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports
35+
else:
36+
from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports
37+
38+
class VaultsOperations(_VaultsOperations):
39+
@distributed_trace
40+
def list(self, top: Optional[int] = None, **kwargs: Any) -> AsyncIterable["_models.Resource"]:
41+
"""The List operation gets information about the vaults associated with the subscription.
42+
43+
:param top: Maximum number of results to return. Default value is None.
44+
:type top: int
45+
:keyword filter: The filter to apply on the operation. Default value is "resourceType eq
46+
'Microsoft.KeyVault/vaults'". Note that overriding this default value may result in unsupported
47+
behavior.
48+
:paramtype filter: str
49+
:keyword api_version: Azure Resource Manager Api Version. Default value is "2015-11-01". Note
50+
that overriding this default value may result in unsupported behavior.
51+
:paramtype api_version: str
52+
:keyword callable cls: A custom type or function that will be passed the direct response
53+
:return: An iterator like instance of either Resource or the result of cls(response)
54+
:rtype:
55+
~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.keyvault.v2023_02_01.models.Resource]
56+
:raises ~azure.core.exceptions.HttpResponseError:
57+
"""
58+
_headers = kwargs.pop("headers", {}) or {}
59+
_params = case_insensitive_dict(kwargs.pop("params", {}) or {})
60+
61+
filter: Literal["resourceType eq 'Microsoft.KeyVault/vaults'"] = kwargs.pop(
62+
"filter", _params.pop("$filter", "resourceType eq 'Microsoft.KeyVault/vaults'")
63+
)
64+
api_version: Literal["2015-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2015-11-01"))
65+
cls: ClsType[_models.ResourceListResult] = kwargs.pop("cls", None)
66+
67+
error_map = {
68+
401: ClientAuthenticationError,
69+
404: ResourceNotFoundError,
70+
409: ResourceExistsError,
71+
304: ResourceNotModifiedError,
72+
}
73+
error_map.update(kwargs.pop("error_map", {}) or {})
74+
75+
def prepare_request(next_link=None):
76+
if not next_link:
77+
78+
request = build_list_request(
79+
subscription_id=self._config.subscription_id,
80+
top=top,
81+
filter=filter,
82+
api_version=api_version,
83+
template_url=self.list.metadata["url"],
84+
headers=_headers,
85+
params=_params,
86+
)
87+
request = _convert_request(request)
88+
request.url = self._client.format_url(request.url)
89+
90+
else:
91+
# make call to next link with the client's api-version
92+
_parsed_next_link = urllib.parse.urlparse(next_link)
93+
_next_request_params = case_insensitive_dict(
94+
{
95+
key: [urllib.parse.quote(v) for v in value]
96+
for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items()
97+
}
98+
)
99+
# change this line to use the passed in api version
100+
_next_request_params["api-version"] = api_version
101+
request = HttpRequest(
102+
"GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params
103+
)
104+
request = _convert_request(request)
105+
request.url = self._client.format_url(request.url)
106+
request.method = "GET"
107+
return request
108+
109+
async def extract_data(pipeline_response):
110+
deserialized = self._deserialize("ResourceListResult", pipeline_response)
111+
list_of_elem = deserialized.value
112+
if cls:
113+
list_of_elem = cls(list_of_elem) # type: ignore
114+
return deserialized.next_link or None, AsyncList(list_of_elem)
115+
116+
async def get_next(next_link=None):
117+
request = prepare_request(next_link)
118+
119+
_stream = False
120+
pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access
121+
request, stream=_stream, **kwargs
122+
)
123+
response = pipeline_response.http_response
124+
125+
if response.status_code not in [200]:
126+
map_error(status_code=response.status_code, response=response, error_map=error_map)
127+
raise HttpResponseError(response=response, error_format=ARMErrorFormat)
128+
129+
return pipeline_response
130+
131+
return AsyncItemPaged(get_next, extract_data)
132+
133+
list.metadata = {"url": "/subscriptions/{subscriptionId}/resources"}
134+
135+
__all__: List[str] = ["VaultsOperations"] # Add all objects you want publicly available to users at this package level
12136

13137

14138
def patch_sdk():

sdk/keyvault/azure-mgmt-keyvault/azure/mgmt/keyvault/v2016_10_01/operations/_patch.py

Lines changed: 125 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,132 @@
66
77
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
88
"""
9-
from typing import List
9+
import sys
10+
from typing import Any, List, Iterable, Optional
11+
import urllib.parse
1012

11-
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
13+
from azure.core.tracing.decorator import distributed_trace
14+
from azure.core.utils import case_insensitive_dict
15+
from azure.core.exceptions import (
16+
ClientAuthenticationError,
17+
HttpResponseError,
18+
ResourceExistsError,
19+
ResourceNotFoundError,
20+
ResourceNotModifiedError,
21+
map_error,
22+
)
23+
from azure.core.rest import HttpRequest
24+
from azure.core.paging import ItemPaged
25+
from azure.core.pipeline import PipelineResponse
26+
from azure.mgmt.core.exceptions import ARMErrorFormat
27+
28+
from ._vaults_operations import VaultsOperations as _VaultsOperations, ClsType, build_list_request
29+
from .. import models as _models
30+
from .._vendor import _convert_request
31+
32+
if sys.version_info >= (3, 8):
33+
from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports
34+
else:
35+
from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports
36+
37+
class VaultsOperations(_VaultsOperations):
38+
@distributed_trace
39+
def list(self, top: Optional[int] = None, **kwargs: Any) -> Iterable["_models.Resource"]:
40+
"""The List operation gets information about the vaults associated with the subscription.
41+
42+
:param top: Maximum number of results to return. Default value is None.
43+
:type top: int
44+
:keyword filter: The filter to apply on the operation. Default value is "resourceType eq
45+
'Microsoft.KeyVault/vaults'". Note that overriding this default value may result in unsupported
46+
behavior.
47+
:paramtype filter: str
48+
:keyword api_version: Azure Resource Manager Api Version. Default value is "2015-11-01". Note
49+
that overriding this default value may result in unsupported behavior.
50+
:paramtype api_version: str
51+
:keyword callable cls: A custom type or function that will be passed the direct response
52+
:return: An iterator like instance of either Resource or the result of cls(response)
53+
:rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.keyvault.v2023_02_01.models.Resource]
54+
:raises ~azure.core.exceptions.HttpResponseError:
55+
"""
56+
_headers = kwargs.pop("headers", {}) or {}
57+
_params = case_insensitive_dict(kwargs.pop("params", {}) or {})
58+
59+
filter: Literal["resourceType eq 'Microsoft.KeyVault/vaults'"] = kwargs.pop(
60+
"filter", _params.pop("$filter", "resourceType eq 'Microsoft.KeyVault/vaults'")
61+
)
62+
api_version: Literal["2015-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2015-11-01"))
63+
cls: ClsType[_models.ResourceListResult] = kwargs.pop("cls", None)
64+
65+
error_map = {
66+
401: ClientAuthenticationError,
67+
404: ResourceNotFoundError,
68+
409: ResourceExistsError,
69+
304: ResourceNotModifiedError,
70+
}
71+
error_map.update(kwargs.pop("error_map", {}) or {})
72+
73+
def prepare_request(next_link=None):
74+
if not next_link:
75+
76+
request = build_list_request(
77+
subscription_id=self._config.subscription_id,
78+
top=top,
79+
filter=filter,
80+
api_version=api_version,
81+
template_url=self.list.metadata["url"],
82+
headers=_headers,
83+
params=_params,
84+
)
85+
request = _convert_request(request)
86+
request.url = self._client.format_url(request.url)
87+
88+
else:
89+
# make call to next link with the client's api-version
90+
_parsed_next_link = urllib.parse.urlparse(next_link)
91+
_next_request_params = case_insensitive_dict(
92+
{
93+
key: [urllib.parse.quote(v) for v in value]
94+
for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items()
95+
}
96+
)
97+
# change this line to use the passed in api version
98+
_next_request_params["api-version"] = api_version
99+
request = HttpRequest(
100+
"GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params
101+
)
102+
request = _convert_request(request)
103+
request.url = self._client.format_url(request.url)
104+
request.method = "GET"
105+
return request
106+
107+
def extract_data(pipeline_response):
108+
deserialized = self._deserialize("ResourceListResult", pipeline_response)
109+
list_of_elem = deserialized.value
110+
if cls:
111+
list_of_elem = cls(list_of_elem) # type: ignore
112+
return deserialized.next_link or None, iter(list_of_elem)
113+
114+
def get_next(next_link=None):
115+
request = prepare_request(next_link)
116+
117+
_stream = False
118+
pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access
119+
request, stream=_stream, **kwargs
120+
)
121+
response = pipeline_response.http_response
122+
123+
if response.status_code not in [200]:
124+
map_error(status_code=response.status_code, response=response, error_map=error_map)
125+
raise HttpResponseError(response=response, error_format=ARMErrorFormat)
126+
127+
return pipeline_response
128+
129+
return ItemPaged(get_next, extract_data)
130+
131+
list.metadata = {"url": "/subscriptions/{subscriptionId}/resources"}
132+
133+
134+
__all__: List[str] = ["VaultsOperations"] # Add all objects you want publicly available to users at this package level
12135

13136

14137
def patch_sdk():

sdk/keyvault/azure-mgmt-keyvault/azure/mgmt/keyvault/v2018_02_14/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
77
# --------------------------------------------------------------------------
88

9-
VERSION = "10.2.2"
9+
VERSION = "10.2.3"

0 commit comments

Comments
 (0)