Skip to content

Commit 96c3605

Browse files
azclibotSDKAutoPraveenkumar RavikumarTimLovellSmithchantalolieman
authored
[AutoRelease] t2-redis-2021-12-16-25321 (Azure#22194)
* CodeGen from PR 15828 in Azure/azure-rest-api-specs [Hub Generated] Review request for Microsoft.Cache to add version stable/2021-06-01 (Azure#15828) * Adds base for updating Microsoft.Cache from version stable/2020-12-01 to version 2021-06-01 * Updates readme * Updates API version in new specs and examples * Adding managed identities param * lint correction * Introduce common-types definitions useful for services that support ManagedIdentity. * Refactor latest redis.json to be the first usage of the new ManagedServiceIdentity definition from common-types. * Fix spellCheck failures * Fix model, redis service identity should be modeled as updatable. * modifying example response * ManagedServiceIdentityType should be modeled as string for extensibility. * Add commontypes/resource-management/v3/managedidentity which models managed identity for services supporting both SystemAssignedIdentity and UserAssignedIdentity. * fixing ROUNDTRIP_ADDITIONAL_PROPERTY s360 issue * redisConfiguration changes, Add Identity to resp * Fixing swagger lintdiff error * Add a canonical SystemAssignedServiceIdentityType type definition which supports 'None', since that is required going forward. Also make the 'type' property required, since omitting it from the request would not be clear in intent. * adding back additional properties * prettier fix * Add principalId and tenantId. * Update patch responses to include 202 when requests are longrunning * Adding swagger issue fixes made in last version * adding space in System&UserAssigned identity type * revert 78a8a8725558df64729569ccf38b2b83e3fb93b7 * updating managedidentity type version * adding example for 202 status code * reverting 202 status code addition Co-authored-by: Praveenkumar Ravikumar <prravikumar@microsoft.com> Co-authored-by: Tim Lovell-Smith <tilovell@microsoft.com> Co-authored-by: Chantal Olieman <choliema@microsoft.com> * version,CHANGELOG Co-authored-by: SDKAuto <sdkautomation@microsoft.com> Co-authored-by: Praveenkumar Ravikumar <prravikumar@microsoft.com> Co-authored-by: Tim Lovell-Smith <tilovell@microsoft.com> Co-authored-by: Chantal Olieman <choliema@microsoft.com> Co-authored-by: PythonSdkPipelines <PythonSdkPipelines>
1 parent 2f74e20 commit 96c3605

33 files changed

+4845
-2446
lines changed

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

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

3+
## 13.1.0 (2021-12-16)
4+
5+
**Features**
6+
7+
- Model RedisResource has a new parameter identity
8+
- Model RedisUpdateParameters has a new parameter identity
9+
- Model RedisCreateParameters has a new parameter identity
10+
311
## 13.0.0 (2021-07-16)
412

513
**Features**
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
2-
"autorest": "3.4.2",
2+
"autorest": "3.7.2",
33
"use": [
4-
"@autorest/python@5.8.1",
5-
"@autorest/modelerfour@4.19.2"
4+
"@autorest/python@5.12.0",
5+
"@autorest/modelerfour@4.19.3"
66
],
7-
"commit": "55558c4b2a1ee05064b1ce6733edf72a0345cfb8",
7+
"commit": "b28cdff098a89aab796e38c78b6b71a897fbae47",
88
"repository_url": "https://github.com/Azure/azure-rest-api-specs",
9-
"autorest_command": "autorest specification/redis/resource-manager/readme.md --multiapi --python --python-mode=update --python-sdks-folder=/home/vsts/work/1/s/azure-sdk-for-python/sdk --track2 --use=@autorest/python@5.8.1 --use=@autorest/modelerfour@4.19.2 --version=3.4.2",
9+
"autorest_command": "autorest specification/redis/resource-manager/readme.md --multiapi --python --python-mode=update --python-sdks-folder=/home/vsts/work/1/s/azure-sdk-for-python/sdk --track2 --use=@autorest/python@5.12.0 --use=@autorest/modelerfour@4.19.3 --version=3.7.2",
1010
"readme": "specification/redis/resource-manager/readme.md"
1111
}

sdk/redis/azure-mgmt-redis/azure/mgmt/redis/__init__.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
__version__ = VERSION
1313
__all__ = ['RedisManagementClient']
1414

15-
try:
16-
from ._patch import patch_sdk # type: ignore
17-
patch_sdk()
18-
except ImportError:
19-
pass
15+
# `._patch.py` is used for handwritten extensions to the generated code
16+
# Example: https://github.com/Azure/azure-sdk-for-python/blob/main/doc/dev/customize_code/how-to-patch-sdk-code.md
17+
from ._patch import patch_sdk
18+
patch_sdk()

sdk/redis/azure-mgmt-redis/azure/mgmt/redis/_configuration.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from azure.core.configuration import Configuration
1212
from azure.core.pipeline import policies
13-
from azure.mgmt.core.policies import ARMHttpLoggingPolicy
13+
from azure.mgmt.core.policies import ARMChallengeAuthenticationPolicy, ARMHttpLoggingPolicy
1414

1515
from ._version import VERSION
1616

@@ -40,15 +40,15 @@ def __init__(
4040
**kwargs # type: Any
4141
):
4242
# type: (...) -> None
43+
super(RedisManagementClientConfiguration, self).__init__(**kwargs)
4344
if credential is None:
4445
raise ValueError("Parameter 'credential' must not be None.")
4546
if subscription_id is None:
4647
raise ValueError("Parameter 'subscription_id' must not be None.")
47-
super(RedisManagementClientConfiguration, self).__init__(**kwargs)
4848

4949
self.credential = credential
5050
self.subscription_id = subscription_id
51-
self.api_version = "2020-12-01"
51+
self.api_version = "2021-06-01"
5252
self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default'])
5353
kwargs.setdefault('sdk_moniker', 'mgmt-redis/{}'.format(VERSION))
5454
self._configure(**kwargs)
@@ -68,4 +68,4 @@ def _configure(
6868
self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs)
6969
self.authentication_policy = kwargs.get('authentication_policy')
7070
if self.credential and not self.authentication_policy:
71-
self.authentication_policy = policies.BearerTokenCredentialPolicy(self.credential, *self.credential_scopes, **kwargs)
71+
self.authentication_policy = ARMChallengeAuthenticationPolicy(self.credential, *self.credential_scopes, **kwargs)

sdk/redis/azure-mgmt-redis/azure/mgmt/redis/_metadata.json

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
{
2-
"chosen_version": "2020-12-01",
3-
"total_api_version_list": ["2020-12-01"],
2+
"chosen_version": "2021-06-01",
3+
"total_api_version_list": ["2021-06-01"],
44
"client": {
55
"name": "RedisManagementClient",
66
"filename": "_redis_management_client",
77
"description": "REST API for Azure Redis Cache Service.",
8-
"base_url": "\u0027https://management.azure.com\u0027",
9-
"custom_base_url": null,
8+
"host_value": "\"https://management.azure.com\"",
9+
"parameterized_host_template": null,
1010
"azure_arm": true,
1111
"has_lro_operations": true,
1212
"client_side_validation": false,
13-
"sync_imports": "{\"typing\": {\"azurecore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}, \"regular\": {\"azurecore\": {\"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"], \"msrest\": [\"Deserializer\", \"Serializer\"], \"azure.mgmt.core\": [\"ARMPipelineClient\"]}, \"local\": {\"._configuration\": [\"RedisManagementClientConfiguration\"]}}, \"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}, \"azurecore\": {\"azure.core.pipeline.transport\": [\"HttpRequest\", \"HttpResponse\"]}}}",
14-
"async_imports": "{\"typing\": {\"azurecore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}, \"regular\": {\"azurecore\": {\"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"], \"msrest\": [\"Deserializer\", \"Serializer\"], \"azure.mgmt.core\": [\"AsyncARMPipelineClient\"]}, \"local\": {\"._configuration\": [\"RedisManagementClientConfiguration\"]}}, \"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}, \"azurecore\": {\"azure.core.pipeline.transport\": [\"AsyncHttpResponse\", \"HttpRequest\"]}}}"
13+
"sync_imports": "{\"typing\": {\"azurecore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}, \"regular\": {\"azurecore\": {\"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"], \"msrest\": [\"Deserializer\", \"Serializer\"], \"azure.mgmt.core\": [\"ARMPipelineClient\"]}, \"local\": {\"._configuration\": [\"RedisManagementClientConfiguration\"]}}, \"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}}",
14+
"async_imports": "{\"typing\": {\"azurecore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"], \"azure.core.credentials\": [\"TokenCredential\"]}}, \"regular\": {\"azurecore\": {\"azure.profiles\": [\"KnownProfiles\", \"ProfileDefinition\"], \"azure.profiles.multiapiclient\": [\"MultiApiClientMixin\"], \"msrest\": [\"Deserializer\", \"Serializer\"], \"azure.mgmt.core\": [\"AsyncARMPipelineClient\"]}, \"local\": {\"._configuration\": [\"RedisManagementClientConfiguration\"]}}, \"conditional\": {\"stdlib\": {\"typing\": [\"Any\", \"Optional\"]}}}"
1515
},
1616
"global_parameters": {
1717
"sync": {
@@ -54,7 +54,7 @@
5454
"required": false
5555
},
5656
"base_url": {
57-
"signature": "base_url=None, # type: Optional[str]",
57+
"signature": "base_url=\"https://management.azure.com\", # type: str",
5858
"description": "Service URL",
5959
"docstring_type": "str",
6060
"required": false
@@ -74,7 +74,7 @@
7474
"required": false
7575
},
7676
"base_url": {
77-
"signature": "base_url: Optional[str] = None,",
77+
"signature": "base_url: str = \"https://management.azure.com\",",
7878
"description": "Service URL",
7979
"docstring_type": "str",
8080
"required": false
@@ -91,11 +91,10 @@
9191
"config": {
9292
"credential": true,
9393
"credential_scopes": ["https://management.azure.com/.default"],
94-
"credential_default_policy_type": "BearerTokenCredentialPolicy",
95-
"credential_default_policy_type_has_async_version": true,
96-
"credential_key_header_name": null,
97-
"sync_imports": "{\"regular\": {\"azurecore\": {\"azure.core.configuration\": [\"Configuration\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMHttpLoggingPolicy\"]}, \"local\": {\"._version\": [\"VERSION\"]}}, \"conditional\": {\"stdlib\": {\"typing\": [\"Any\"]}}, \"typing\": {\"azurecore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}",
98-
"async_imports": "{\"regular\": {\"azurecore\": {\"azure.core.configuration\": [\"Configuration\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMHttpLoggingPolicy\"]}, \"local\": {\".._version\": [\"VERSION\"]}}, \"conditional\": {\"stdlib\": {\"typing\": [\"Any\"]}}, \"typing\": {\"azurecore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}"
94+
"credential_call_sync": "ARMChallengeAuthenticationPolicy(self.credential, *self.credential_scopes, **kwargs)",
95+
"credential_call_async": "AsyncARMChallengeAuthenticationPolicy(self.credential, *self.credential_scopes, **kwargs)",
96+
"sync_imports": "{\"regular\": {\"azurecore\": {\"azure.core.configuration\": [\"Configuration\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMChallengeAuthenticationPolicy\", \"ARMHttpLoggingPolicy\"]}, \"local\": {\"._version\": [\"VERSION\"]}}, \"conditional\": {\"stdlib\": {\"typing\": [\"Any\"]}}, \"typing\": {\"azurecore\": {\"azure.core.credentials\": [\"TokenCredential\"]}}}",
97+
"async_imports": "{\"regular\": {\"azurecore\": {\"azure.core.configuration\": [\"Configuration\"], \"azure.core.pipeline\": [\"policies\"], \"azure.mgmt.core.policies\": [\"ARMHttpLoggingPolicy\", \"AsyncARMChallengeAuthenticationPolicy\"]}, \"local\": {\".._version\": [\"VERSION\"]}}, \"conditional\": {\"stdlib\": {\"typing\": [\"Any\"]}}, \"typing\": {\"azurecore\": {\"azure.core.credentials_async\": [\"AsyncTokenCredential\"]}}}"
9998
},
10099
"operation_groups": {
101100
"operations": "Operations",
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# coding=utf-8
2+
# --------------------------------------------------------------------------
3+
#
4+
# Copyright (c) Microsoft Corporation. All rights reserved.
5+
#
6+
# The MIT License (MIT)
7+
#
8+
# Permission is hereby granted, free of charge, to any person obtaining a copy
9+
# of this software and associated documentation files (the ""Software""), to
10+
# deal in the Software without restriction, including without limitation the
11+
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
12+
# sell copies of the Software, and to permit persons to whom the Software is
13+
# furnished to do so, subject to the following conditions:
14+
#
15+
# The above copyright notice and this permission notice shall be included in
16+
# all copies or substantial portions of the Software.
17+
#
18+
# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24+
# IN THE SOFTWARE.
25+
#
26+
# --------------------------------------------------------------------------
27+
28+
# This file is used for handwritten extensions to the generated code. Example:
29+
# https://github.com/Azure/azure-sdk-for-python/blob/main/doc/dev/customize_code/how-to-patch-sdk-code.md
30+
def patch_sdk():
31+
pass

sdk/redis/azure-mgmt-redis/azure/mgmt/redis/_redis_management_client.py

Lines changed: 47 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,22 @@
66
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
77
# --------------------------------------------------------------------------
88

9+
from copy import deepcopy
910
from typing import TYPE_CHECKING
1011

1112
from azure.mgmt.core import ARMPipelineClient
1213
from msrest import Deserializer, Serializer
1314

15+
from . import models
16+
from ._configuration import RedisManagementClientConfiguration
17+
from .operations import FirewallRulesOperations, LinkedServerOperations, Operations, PatchSchedulesOperations, PrivateEndpointConnectionsOperations, PrivateLinkResourcesOperations, RedisOperations
18+
1419
if TYPE_CHECKING:
1520
# pylint: disable=unused-import,ungrouped-imports
1621
from typing import Any, Optional
1722

1823
from azure.core.credentials import TokenCredential
19-
from azure.core.pipeline.transport import HttpRequest, HttpResponse
20-
21-
from ._configuration import RedisManagementClientConfiguration
22-
from .operations import Operations
23-
from .operations import RedisOperations
24-
from .operations import FirewallRulesOperations
25-
from .operations import PatchSchedulesOperations
26-
from .operations import LinkedServerOperations
27-
from .operations import PrivateEndpointConnectionsOperations
28-
from .operations import PrivateLinkResourcesOperations
29-
from . import models
30-
24+
from azure.core.rest import HttpRequest, HttpResponse
3125

3226
class RedisManagementClient(object):
3327
"""REST API for Azure Redis Cache Service.
@@ -43,67 +37,71 @@ class RedisManagementClient(object):
4337
:ivar linked_server: LinkedServerOperations operations
4438
:vartype linked_server: azure.mgmt.redis.operations.LinkedServerOperations
4539
:ivar private_endpoint_connections: PrivateEndpointConnectionsOperations operations
46-
:vartype private_endpoint_connections: azure.mgmt.redis.operations.PrivateEndpointConnectionsOperations
40+
:vartype private_endpoint_connections:
41+
azure.mgmt.redis.operations.PrivateEndpointConnectionsOperations
4742
:ivar private_link_resources: PrivateLinkResourcesOperations operations
4843
:vartype private_link_resources: azure.mgmt.redis.operations.PrivateLinkResourcesOperations
4944
:param credential: Credential needed for the client to connect to Azure.
5045
:type credential: ~azure.core.credentials.TokenCredential
51-
:param subscription_id: Gets subscription credentials which uniquely identify the Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.
46+
:param subscription_id: Gets subscription credentials which uniquely identify the Microsoft
47+
Azure subscription. The subscription ID forms part of the URI for every service call.
5248
:type subscription_id: str
53-
:param str base_url: Service URL
54-
:keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present.
49+
:param base_url: Service URL. Default value is 'https://management.azure.com'.
50+
:type base_url: str
51+
:keyword int polling_interval: Default waiting time between two polls for LRO operations if no
52+
Retry-After header is present.
5553
"""
5654

5755
def __init__(
5856
self,
5957
credential, # type: "TokenCredential"
6058
subscription_id, # type: str
61-
base_url=None, # type: Optional[str]
59+
base_url="https://management.azure.com", # type: str
6260
**kwargs # type: Any
6361
):
6462
# type: (...) -> None
65-
if not base_url:
66-
base_url = 'https://management.azure.com'
67-
self._config = RedisManagementClientConfiguration(credential, subscription_id, **kwargs)
63+
self._config = RedisManagementClientConfiguration(credential=credential, subscription_id=subscription_id, **kwargs)
6864
self._client = ARMPipelineClient(base_url=base_url, config=self._config, **kwargs)
6965

7066
client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
7167
self._serialize = Serializer(client_models)
72-
self._serialize.client_side_validation = False
7368
self._deserialize = Deserializer(client_models)
69+
self._serialize.client_side_validation = False
70+
self.operations = Operations(self._client, self._config, self._serialize, self._deserialize)
71+
self.redis = RedisOperations(self._client, self._config, self._serialize, self._deserialize)
72+
self.firewall_rules = FirewallRulesOperations(self._client, self._config, self._serialize, self._deserialize)
73+
self.patch_schedules = PatchSchedulesOperations(self._client, self._config, self._serialize, self._deserialize)
74+
self.linked_server = LinkedServerOperations(self._client, self._config, self._serialize, self._deserialize)
75+
self.private_endpoint_connections = PrivateEndpointConnectionsOperations(self._client, self._config, self._serialize, self._deserialize)
76+
self.private_link_resources = PrivateLinkResourcesOperations(self._client, self._config, self._serialize, self._deserialize)
77+
7478

75-
self.operations = Operations(
76-
self._client, self._config, self._serialize, self._deserialize)
77-
self.redis = RedisOperations(
78-
self._client, self._config, self._serialize, self._deserialize)
79-
self.firewall_rules = FirewallRulesOperations(
80-
self._client, self._config, self._serialize, self._deserialize)
81-
self.patch_schedules = PatchSchedulesOperations(
82-
self._client, self._config, self._serialize, self._deserialize)
83-
self.linked_server = LinkedServerOperations(
84-
self._client, self._config, self._serialize, self._deserialize)
85-
self.private_endpoint_connections = PrivateEndpointConnectionsOperations(
86-
self._client, self._config, self._serialize, self._deserialize)
87-
self.private_link_resources = PrivateLinkResourcesOperations(
88-
self._client, self._config, self._serialize, self._deserialize)
89-
90-
def _send_request(self, http_request, **kwargs):
91-
# type: (HttpRequest, Any) -> HttpResponse
79+
def _send_request(
80+
self,
81+
request, # type: HttpRequest
82+
**kwargs # type: Any
83+
):
84+
# type: (...) -> HttpResponse
9285
"""Runs the network request through the client's chained policies.
9386
94-
:param http_request: The network request you want to make. Required.
95-
:type http_request: ~azure.core.pipeline.transport.HttpRequest
96-
:keyword bool stream: Whether the response payload will be streamed. Defaults to True.
87+
>>> from azure.core.rest import HttpRequest
88+
>>> request = HttpRequest("GET", "https://www.example.org/")
89+
<HttpRequest [GET], url: 'https://www.example.org/'>
90+
>>> response = client._send_request(request)
91+
<HttpResponse: 200 OK>
92+
93+
For more information on this code flow, see https://aka.ms/azsdk/python/protocol/quickstart
94+
95+
:param request: The network request you want to make. Required.
96+
:type request: ~azure.core.rest.HttpRequest
97+
:keyword bool stream: Whether the response payload will be streamed. Defaults to False.
9798
:return: The response of your network call. Does not do error handling on your response.
98-
:rtype: ~azure.core.pipeline.transport.HttpResponse
99+
:rtype: ~azure.core.rest.HttpResponse
99100
"""
100-
path_format_arguments = {
101-
'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'),
102-
}
103-
http_request.url = self._client.format_url(http_request.url, **path_format_arguments)
104-
stream = kwargs.pop("stream", True)
105-
pipeline_response = self._client._pipeline.run(http_request, stream=stream, **kwargs)
106-
return pipeline_response.http_response
101+
102+
request_copy = deepcopy(request)
103+
request_copy.url = self._client.format_url(request_copy.url)
104+
return self._client.send_request(request_copy, **kwargs)
107105

108106
def close(self):
109107
# type: () -> None
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# --------------------------------------------------------------------------
2+
# Copyright (c) Microsoft Corporation. All rights reserved.
3+
# Licensed under the MIT License. See License.txt in the project root for license information.
4+
# Code generated by Microsoft (R) AutoRest Code Generator.
5+
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
6+
# --------------------------------------------------------------------------
7+
8+
from azure.core.pipeline.transport import HttpRequest
9+
10+
def _convert_request(request, files=None):
11+
data = request.content if not files else None
12+
request = HttpRequest(method=request.method, url=request.url, headers=request.headers, data=data)
13+
if files:
14+
request.set_formdata_body(files)
15+
return request
16+
17+
def _format_url_section(template, **kwargs):
18+
components = template.split("/")
19+
while components:
20+
try:
21+
return template.format(**kwargs)
22+
except KeyError as key:
23+
formatted_components = template.split("/")
24+
components = [
25+
c for c in formatted_components if "{}".format(key.args[0]) not in c
26+
]
27+
template = "/".join(components)

0 commit comments

Comments
 (0)