Родитель
410e989cd6
Коммит
1d654f40e7
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
changeKind: dependencies
|
||||
packages:
|
||||
- "@azure-tools/typespec-python"
|
||||
---
|
||||
|
||||
Bump typespec 0.58.0
|
|
@ -30,11 +30,11 @@
|
|||
},
|
||||
"homepage": "https://github.com/Azure/autorest.python#readme",
|
||||
"devDependencies": {
|
||||
"@azure-tools/cadl-ranch": "~0.12.7",
|
||||
"@azure-tools/cadl-ranch": "~0.13.4",
|
||||
"@actions/github": "6.0.0",
|
||||
"@chronus/chronus": "^0.10.2",
|
||||
"@chronus/github": "^0.3.2",
|
||||
"@typespec/prettier-plugin-typespec": "~0.55.0",
|
||||
"@typespec/prettier-plugin-typespec": "~0.58.0",
|
||||
"autorest": "3.6.3",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
|
|
|
@ -40,4 +40,4 @@ def test_escaped_reserved_words():
|
|||
"continuation_token": "continuation_token",
|
||||
}
|
||||
for name in expected_conversion_enum:
|
||||
assert pad_reserved_words(name, pad_type=PadType.ENUM) == expected_conversion_enum[name]
|
||||
assert pad_reserved_words(name, pad_type=PadType.ENUM_VALUE) == expected_conversion_enum[name]
|
||||
|
|
|
@ -235,7 +235,8 @@ class PreProcessPlugin(YamlUpdatePlugin): # pylint: disable=abstract-method
|
|||
property["clientName"] = self.pad_reserved_words(property["clientName"].lower(), PadType.PROPERTY)
|
||||
add_redefined_builtin_info(property["clientName"], property)
|
||||
if type.get("name"):
|
||||
name = self.pad_reserved_words(type["name"], PadType.MODEL)
|
||||
pad_type = PadType.MODEL if type["type"] == "model" else PadType.ENUM_CLASS
|
||||
name = self.pad_reserved_words(type["name"], pad_type)
|
||||
type["name"] = name[0].upper() + name[1:]
|
||||
type["description"] = update_description(type.get("description", ""), type["name"])
|
||||
type["snakeCaseName"] = to_snake_case(type["name"])
|
||||
|
@ -243,7 +244,7 @@ class PreProcessPlugin(YamlUpdatePlugin): # pylint: disable=abstract-method
|
|||
# we're enums
|
||||
values_to_add = []
|
||||
for value in type["values"]:
|
||||
padded_name = self.pad_reserved_words(value["name"].lower(), PadType.ENUM).upper()
|
||||
padded_name = self.pad_reserved_words(value["name"].lower(), PadType.ENUM_VALUE).upper()
|
||||
if self.version_tolerant:
|
||||
if padded_name[0] in "0123456789":
|
||||
padded_name = "ENUM_" + padded_name
|
||||
|
|
|
@ -53,9 +53,10 @@ basic_latin_chars = {
|
|||
|
||||
class PadType(str, Enum):
|
||||
MODEL = "Model"
|
||||
ENUM_CLASS = "Enum"
|
||||
METHOD = "_method"
|
||||
PARAMETER = "_parameter"
|
||||
ENUM = "_enum"
|
||||
ENUM_VALUE = "_enum"
|
||||
PROPERTY = "_property"
|
||||
OPERATION_GROUP = "Operations"
|
||||
|
||||
|
@ -175,9 +176,10 @@ RESERVED_WORDS = {
|
|||
"retry_on_status_codes",
|
||||
*_always_reserved,
|
||||
],
|
||||
PadType.MODEL: [*_always_reserved],
|
||||
PadType.MODEL: ["enum", *_always_reserved],
|
||||
PadType.PROPERTY: ["self", *_always_reserved],
|
||||
PadType.ENUM: ["mro", *_always_reserved],
|
||||
PadType.ENUM_CLASS: ["enum", *_always_reserved],
|
||||
PadType.ENUM_VALUE: ["mro", *_always_reserved],
|
||||
PadType.OPERATION_GROUP: [*_always_reserved],
|
||||
}
|
||||
|
||||
|
|
|
@ -44,16 +44,16 @@
|
|||
"scripts/**"
|
||||
],
|
||||
"peerDependencies": {
|
||||
"@azure-tools/typespec-azure-core": ">=0.43.0 <1.0.0",
|
||||
"@azure-tools/typespec-azure-resource-manager": ">=0.43.0 <1.0.0",
|
||||
"@azure-tools/typespec-autorest": ">=0.43.0 <1.0.0",
|
||||
"@azure-tools/typespec-client-generator-core": ">=0.43.2 <1.0.0",
|
||||
"@azure-tools/typespec-azure-rulesets": ">=0.43.0 <3.0.0",
|
||||
"@typespec/compiler": ">=0.57.0 <1.0.0",
|
||||
"@typespec/http": ">=0.57.0 <1.0.0",
|
||||
"@typespec/rest": ">=0.57.0 <1.0.0",
|
||||
"@typespec/versioning": ">=0.57.0 <1.0.0",
|
||||
"@typespec/openapi": ">=0.57.0 <1.0.0"
|
||||
"@azure-tools/typespec-azure-core": ">=0.44.0 <1.0.0",
|
||||
"@azure-tools/typespec-azure-resource-manager": ">=0.44.0 <1.0.0",
|
||||
"@azure-tools/typespec-autorest": ">=0.44.0 <1.0.0",
|
||||
"@azure-tools/typespec-client-generator-core": ">=0.44.1 <1.0.0",
|
||||
"@azure-tools/typespec-azure-rulesets": ">=0.44.0 <3.0.0",
|
||||
"@typespec/compiler": ">=0.58.0 <1.0.0",
|
||||
"@typespec/http": ">=0.58.0 <1.0.0",
|
||||
"@typespec/rest": ">=0.58.0 <1.0.0",
|
||||
"@typespec/versioning": ">=0.58.0 <1.0.0",
|
||||
"@typespec/openapi": ">=0.58.0 <1.0.0"
|
||||
},
|
||||
"dependenciesMeta": {
|
||||
"@azure-tools/typespec-client-generator-core": {
|
||||
|
@ -62,32 +62,32 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"js-yaml": "~4.1.0",
|
||||
"@typespec/openapi3": "~0.57.0",
|
||||
"@typespec/openapi3": "~0.58.0",
|
||||
"@autorest/system-requirements": "~1.0.2",
|
||||
"fs-extra": "~11.2.0",
|
||||
"semver": "~7.6.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@azure-tools/typespec-azure-resource-manager": "~0.43.0",
|
||||
"@azure-tools/typespec-autorest": "~0.43.0",
|
||||
"@azure-tools/cadl-ranch-expect": "~0.14.0",
|
||||
"@azure-tools/cadl-ranch-specs": "~0.34.3",
|
||||
"@azure-tools/typespec-azure-resource-manager": "~0.44.0",
|
||||
"@azure-tools/typespec-autorest": "~0.44.0",
|
||||
"@azure-tools/cadl-ranch-expect": "~0.14.1",
|
||||
"@azure-tools/cadl-ranch-specs": "~0.34.5",
|
||||
"@types/js-yaml": "~4.0.5",
|
||||
"@types/mocha": "~10.0.1",
|
||||
"@types/node": "^18.16.3",
|
||||
"@typespec/eslint-config-typespec": "~0.55.0",
|
||||
"@typespec/openapi": "~0.57.0",
|
||||
"@typespec/openapi": "~0.58.0",
|
||||
"c8": "~7.13.0",
|
||||
"eslint": "^8.57.0",
|
||||
"mocha": "~10.2.0",
|
||||
"rimraf": "~5.0.0",
|
||||
"typescript": "~5.1.3",
|
||||
"@azure-tools/typespec-azure-core": "~0.43.0",
|
||||
"@azure-tools/typespec-client-generator-core": "~0.43.2",
|
||||
"@typespec/compiler": "~0.57.0",
|
||||
"@typespec/http": "~0.57.0",
|
||||
"@typespec/rest": "~0.57.0",
|
||||
"@typespec/versioning": "~0.57.0",
|
||||
"@azure-tools/typespec-azure-rulesets": "0.43.0"
|
||||
"@azure-tools/typespec-azure-core": "~0.44.0",
|
||||
"@azure-tools/typespec-client-generator-core": "~0.44.1",
|
||||
"@typespec/compiler": "~0.58.0",
|
||||
"@typespec/http": "~0.58.0",
|
||||
"@typespec/rest": "~0.58.0",
|
||||
"@typespec/versioning": "~0.58.0",
|
||||
"@azure-tools/typespec-azure-rulesets": "0.44.0"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -227,7 +227,7 @@ export function emitCodeModel<TServiceOperation extends SdkServiceOperation>(
|
|||
sdkContext: PythonSdkContext<TServiceOperation>,
|
||||
) {
|
||||
// Get types
|
||||
const sdkPackage = sdkContext.experimental_sdkPackage;
|
||||
const sdkPackage = sdkContext.sdkPackage;
|
||||
const codeModel: Record<string, any> = {
|
||||
namespace: removeUnderscoresFromNamespace(sdkPackage.rootNamespace).toLowerCase(),
|
||||
clients: [],
|
||||
|
|
|
@ -43,7 +43,7 @@ function addDefaultOptions(sdkContext: SdkContext) {
|
|||
}
|
||||
if (!options["package-name"]) {
|
||||
options["package-name"] = removeUnderscoresFromNamespace(
|
||||
sdkContext.experimental_sdkPackage.rootNamespace.toLowerCase(),
|
||||
sdkContext.sdkPackage.rootNamespace.toLowerCase(),
|
||||
).replace(/\./g, "-");
|
||||
}
|
||||
if (options.flavor !== "azure") {
|
||||
|
|
|
@ -81,7 +81,7 @@ export function getAddedOn<TServiceOperation extends SdkServiceOperation>(
|
|||
// if type is added in the first version of the client, we do not need to add the versioning info
|
||||
if (
|
||||
type.apiVersions[0] ===
|
||||
context.experimental_sdkPackage.clients.find((c) => c.initialization.access === "public")?.apiVersions[0]
|
||||
context.sdkPackage.clients.find((c) => c.initialization.access === "public")?.apiVersions[0]
|
||||
)
|
||||
return undefined;
|
||||
return type.apiVersions[0];
|
||||
|
|
|
@ -23,6 +23,7 @@ class AbstractModel(_model_base.Model):
|
|||
You probably want to use the sub-classes and not this class directly. Known sub-classes are:
|
||||
RealModel
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar kind: Discriminator property for AbstractModel. Required. Default value is None.
|
||||
:vartype kind: str
|
||||
|
@ -40,6 +41,7 @@ class AbstractModel(_model_base.Model):
|
|||
class BaseModel(_model_base.Model):
|
||||
"""Used in internal operations, should be generated but not exported.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: Required.
|
||||
:vartype name: str
|
||||
|
@ -52,6 +54,7 @@ class BaseModel(_model_base.Model):
|
|||
class InnerModel(_model_base.Model):
|
||||
"""Used in internal operations, should be generated but not exported.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: Required.
|
||||
:vartype name: str
|
||||
|
@ -64,6 +67,7 @@ class InnerModel(_model_base.Model):
|
|||
class InternalDecoratorModelInInternal(_model_base.Model):
|
||||
"""Used in an internal operation, should be generated but not exported.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: Required.
|
||||
:vartype name: str
|
||||
|
@ -76,6 +80,7 @@ class InternalDecoratorModelInInternal(_model_base.Model):
|
|||
class NoDecoratorModelInInternal(_model_base.Model):
|
||||
"""Used in an internal operation, should be generated but not exported.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: Required.
|
||||
:vartype name: str
|
||||
|
@ -88,6 +93,7 @@ class NoDecoratorModelInInternal(_model_base.Model):
|
|||
class NoDecoratorModelInPublic(_model_base.Model):
|
||||
"""Used in a public operation, should be generated and exported.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: Required.
|
||||
:vartype name: str
|
||||
|
@ -117,6 +123,7 @@ class NoDecoratorModelInPublic(_model_base.Model):
|
|||
class OuterModel(BaseModel):
|
||||
"""Used in internal operations, should be generated but not exported.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: Required.
|
||||
:vartype name: str
|
||||
|
@ -131,6 +138,7 @@ class OuterModel(BaseModel):
|
|||
class PublicDecoratorModelInInternal(_model_base.Model):
|
||||
"""Used in an internal operation but with public decorator, should be generated and exported.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: Required.
|
||||
:vartype name: str
|
||||
|
@ -160,6 +168,7 @@ class PublicDecoratorModelInInternal(_model_base.Model):
|
|||
class PublicDecoratorModelInPublic(_model_base.Model):
|
||||
"""Used in a public operation, should be generated and exported.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: Required.
|
||||
:vartype name: str
|
||||
|
@ -189,6 +198,7 @@ class PublicDecoratorModelInPublic(_model_base.Model):
|
|||
class RealModel(AbstractModel, discriminator="real"):
|
||||
"""Used in internal operations, should be generated but not exported.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: Required.
|
||||
:vartype name: str
|
||||
|
@ -203,6 +213,7 @@ class RealModel(AbstractModel, discriminator="real"):
|
|||
class SharedModel(_model_base.Model):
|
||||
"""Used by both public and internal operation. It should be generated and exported.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: Required.
|
||||
:vartype name: str
|
||||
|
|
|
@ -111,6 +111,7 @@ class OutputModel(_model_base.Model):
|
|||
class ResultModel(_model_base.Model):
|
||||
"""ResultModel.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: Required.
|
||||
:vartype name: str
|
||||
|
|
|
@ -22,6 +22,7 @@ class FirstItem(_model_base.Model):
|
|||
|
||||
Readonly variables are only populated by the server, and will be ignored when sending a request.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar id: The id of the item. Required.
|
||||
:vartype id: int
|
||||
|
@ -66,6 +67,7 @@ class SecondItem(_model_base.Model):
|
|||
|
||||
Readonly variables are only populated by the server, and will be ignored when sending a request.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: The name of the item. Required.
|
||||
:vartype name: str
|
||||
|
|
|
@ -16,6 +16,7 @@ from .._model_base import rest_field
|
|||
class ExportedUser(_model_base.Model):
|
||||
"""The exported user data.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar name: The name of user. Required.
|
||||
:vartype name: str
|
||||
|
|
|
@ -18,6 +18,7 @@ class User(_model_base.Model):
|
|||
|
||||
Readonly variables are only populated by the server, and will be ignored when sending a request.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar id: The user's id. Required.
|
||||
:vartype id: int
|
||||
|
@ -81,6 +82,7 @@ class UserActionParam(_model_base.Model):
|
|||
class UserActionResponse(_model_base.Model):
|
||||
"""User action response.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar user_action_result: User action result. Required.
|
||||
:vartype user_action_result: str
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
# Release History
|
||||
|
||||
## 1.0.0b1 (1970-01-01)
|
||||
|
||||
- Initial version
|
|
@ -0,0 +1,21 @@
|
|||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
MIT License
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,8 @@
|
|||
include *.md
|
||||
include LICENSE
|
||||
include specs/azure/example/basic/py.typed
|
||||
recursive-include tests *.py
|
||||
recursive-include samples *.py *.md
|
||||
include specs/__init__.py
|
||||
include specs/azure/__init__.py
|
||||
include specs/azure/example/__init__.py
|
|
@ -0,0 +1,45 @@
|
|||
|
||||
|
||||
# Specs Azure Example Basic client library for Python
|
||||
<!-- write necessary description of service -->
|
||||
|
||||
## Getting started
|
||||
|
||||
### Install the package
|
||||
|
||||
```bash
|
||||
python -m pip install specs-azure-example-basic
|
||||
```
|
||||
|
||||
#### Prequisites
|
||||
|
||||
- Python 3.8 or later is required to use this package.
|
||||
- You need an [Azure subscription][azure_sub] to use this package.
|
||||
- An existing Specs Azure Example Basic instance.
|
||||
|
||||
## Contributing
|
||||
|
||||
This project welcomes contributions and suggestions. Most contributions require
|
||||
you to agree to a Contributor License Agreement (CLA) declaring that you have
|
||||
the right to, and actually do, grant us the rights to use your contribution.
|
||||
For details, visit https://cla.microsoft.com.
|
||||
|
||||
When you submit a pull request, a CLA-bot will automatically determine whether
|
||||
you need to provide a CLA and decorate the PR appropriately (e.g., label,
|
||||
comment). Simply follow the instructions provided by the bot. You will only
|
||||
need to do this once across all repos using our CLA.
|
||||
|
||||
This project has adopted the
|
||||
[Microsoft Open Source Code of Conduct][code_of_conduct]. For more information,
|
||||
see the Code of Conduct FAQ or contact opencode@microsoft.com with any
|
||||
additional questions or comments.
|
||||
|
||||
<!-- LINKS -->
|
||||
[code_of_conduct]: https://opensource.microsoft.com/codeofconduct/
|
||||
[authenticate_with_token]: https://docs.microsoft.com/azure/cognitive-services/authentication?tabs=powershell#authenticate-with-an-authentication-token
|
||||
[azure_identity_credentials]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity#credentials
|
||||
[azure_identity_pip]: https://pypi.org/project/azure-identity/
|
||||
[default_azure_credential]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity#defaultazurecredential
|
||||
[pip]: https://pypi.org/project/pip/
|
||||
[azure_sub]: https://azure.microsoft.com/free/
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"CrossLanguagePackageId": "_Specs_.Azure.Example.Basic",
|
||||
"CrossLanguageDefinitionId": {
|
||||
"specs.azure.example.basic.models.ActionRequest": "_Specs_.Azure.Example.Basic.ActionRequest",
|
||||
"specs.azure.example.basic.models.ActionResponse": "_Specs_.Azure.Example.Basic.ActionResponse",
|
||||
"specs.azure.example.basic.models.Model": "_Specs_.Azure.Example.Basic.Model",
|
||||
"specs.azure.example.basic.models.EnumEnum": "_Specs_.Azure.Example.Basic.Enum",
|
||||
"specs.azure.example.basic.AzureExampleClient.basic_action": "Client.AzureExampleClient.basicAction"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
-e ../../../tools/azure-sdk-tools
|
||||
../../core/azure-core
|
||||
aiohttp
|
|
@ -0,0 +1,37 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
import os
|
||||
import pytest
|
||||
from dotenv import load_dotenv
|
||||
from devtools_testutils import (
|
||||
test_proxy,
|
||||
add_general_regex_sanitizer,
|
||||
add_body_key_sanitizer,
|
||||
add_header_regex_sanitizer,
|
||||
)
|
||||
|
||||
load_dotenv()
|
||||
|
||||
|
||||
# aovid record sensitive identity information in recordings
|
||||
@pytest.fixture(scope="session", autouse=True)
|
||||
def add_sanitizers(test_proxy):
|
||||
azureexample_subscription_id = os.environ.get(
|
||||
"AZUREEXAMPLE_SUBSCRIPTION_ID", "00000000-0000-0000-0000-000000000000"
|
||||
)
|
||||
azureexample_tenant_id = os.environ.get("AZUREEXAMPLE_TENANT_ID", "00000000-0000-0000-0000-000000000000")
|
||||
azureexample_client_id = os.environ.get("AZUREEXAMPLE_CLIENT_ID", "00000000-0000-0000-0000-000000000000")
|
||||
azureexample_client_secret = os.environ.get("AZUREEXAMPLE_CLIENT_SECRET", "00000000-0000-0000-0000-000000000000")
|
||||
add_general_regex_sanitizer(regex=azureexample_subscription_id, value="00000000-0000-0000-0000-000000000000")
|
||||
add_general_regex_sanitizer(regex=azureexample_tenant_id, value="00000000-0000-0000-0000-000000000000")
|
||||
add_general_regex_sanitizer(regex=azureexample_client_id, value="00000000-0000-0000-0000-000000000000")
|
||||
add_general_regex_sanitizer(regex=azureexample_client_secret, value="00000000-0000-0000-0000-000000000000")
|
||||
|
||||
add_header_regex_sanitizer(key="Set-Cookie", value="[set-cookie;]")
|
||||
add_header_regex_sanitizer(key="Cookie", value="cookie;")
|
||||
add_body_key_sanitizer(json_path="$..access_token", value="access_token")
|
|
@ -0,0 +1,31 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
import pytest
|
||||
from devtools_testutils import recorded_by_proxy
|
||||
from testpreparer import AzureExampleClientTestBase, AzureExamplePreparer
|
||||
|
||||
|
||||
@pytest.mark.skip("you may need to update the auto-generated test case before run it")
|
||||
class TestAzureExample(AzureExampleClientTestBase):
|
||||
@AzureExamplePreparer()
|
||||
@recorded_by_proxy
|
||||
def test_basic_action(self, azureexample_endpoint):
|
||||
client = self.create_client(endpoint=azureexample_endpoint)
|
||||
response = client.basic_action(
|
||||
body={
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": ["str"],
|
||||
"modelProperty": {"enumProperty": "str", "float32Property": 0.0, "int32Property": 0},
|
||||
"recordProperty": {"str": "str"},
|
||||
},
|
||||
query_param="str",
|
||||
header_param="str",
|
||||
)
|
||||
|
||||
# please add some check logic here by yourself
|
||||
# ...
|
|
@ -0,0 +1,32 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
import pytest
|
||||
from devtools_testutils.aio import recorded_by_proxy_async
|
||||
from testpreparer import AzureExamplePreparer
|
||||
from testpreparer_async import AzureExampleClientTestBaseAsync
|
||||
|
||||
|
||||
@pytest.mark.skip("you may need to update the auto-generated test case before run it")
|
||||
class TestAzureExampleAsync(AzureExampleClientTestBaseAsync):
|
||||
@AzureExamplePreparer()
|
||||
@recorded_by_proxy_async
|
||||
async def test_basic_action(self, azureexample_endpoint):
|
||||
client = self.create_async_client(endpoint=azureexample_endpoint)
|
||||
response = await client.basic_action(
|
||||
body={
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": ["str"],
|
||||
"modelProperty": {"enumProperty": "str", "float32Property": 0.0, "int32Property": 0},
|
||||
"recordProperty": {"str": "str"},
|
||||
},
|
||||
query_param="str",
|
||||
header_param="str",
|
||||
)
|
||||
|
||||
# please add some check logic here by yourself
|
||||
# ...
|
|
@ -0,0 +1,26 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
from devtools_testutils import AzureRecordedTestCase, PowerShellPreparer
|
||||
import functools
|
||||
from specs.azure.example.basic import AzureExampleClient
|
||||
|
||||
|
||||
class AzureExampleClientTestBase(AzureRecordedTestCase):
|
||||
|
||||
def create_client(self, endpoint):
|
||||
credential = self.get_credential(AzureExampleClient)
|
||||
return self.create_client_from_credential(
|
||||
AzureExampleClient,
|
||||
credential=credential,
|
||||
endpoint=endpoint,
|
||||
)
|
||||
|
||||
|
||||
AzureExamplePreparer = functools.partial(
|
||||
PowerShellPreparer, "azureexample", azureexample_endpoint="https://fake_azureexample_endpoint.com"
|
||||
)
|
|
@ -0,0 +1,20 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
from devtools_testutils import AzureRecordedTestCase
|
||||
from specs.azure.example.basic.aio import AzureExampleClient
|
||||
|
||||
|
||||
class AzureExampleClientTestBaseAsync(AzureRecordedTestCase):
|
||||
|
||||
def create_async_client(self, endpoint):
|
||||
credential = self.get_credential(AzureExampleClient, is_async=True)
|
||||
return self.create_client_from_credential(
|
||||
AzureExampleClient,
|
||||
credential=credential,
|
||||
endpoint=endpoint,
|
||||
)
|
|
@ -0,0 +1,72 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
# coding: utf-8
|
||||
|
||||
import os
|
||||
import re
|
||||
from setuptools import setup, find_packages
|
||||
|
||||
|
||||
PACKAGE_NAME = "specs-azure-example-basic"
|
||||
PACKAGE_PPRINT_NAME = "Specs Azure Example Basic"
|
||||
|
||||
# a-b-c => a/b/c
|
||||
package_folder_path = PACKAGE_NAME.replace("-", "/")
|
||||
|
||||
# Version extraction inspired from 'requests'
|
||||
with open(os.path.join(package_folder_path, "_version.py"), "r") as fd:
|
||||
version = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]', fd.read(), re.MULTILINE).group(1)
|
||||
|
||||
if not version:
|
||||
raise RuntimeError("Cannot find version information")
|
||||
|
||||
|
||||
setup(
|
||||
name=PACKAGE_NAME,
|
||||
version=version,
|
||||
description="Microsoft {} Client Library for Python".format(PACKAGE_PPRINT_NAME),
|
||||
long_description=open("README.md", "r").read(),
|
||||
long_description_content_type="text/markdown",
|
||||
license="MIT License",
|
||||
author="Microsoft Corporation",
|
||||
author_email="azpysdkhelp@microsoft.com",
|
||||
url="https://github.com/Azure/azure-sdk-for-python/tree/main/sdk",
|
||||
keywords="azure, azure sdk",
|
||||
classifiers=[
|
||||
"Development Status :: 4 - Beta",
|
||||
"Programming Language :: Python",
|
||||
"Programming Language :: Python :: 3 :: Only",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.8",
|
||||
"Programming Language :: Python :: 3.9",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"License :: OSI Approved :: MIT License",
|
||||
],
|
||||
zip_safe=False,
|
||||
packages=find_packages(
|
||||
exclude=[
|
||||
"tests",
|
||||
# Exclude packages that will be covered by PEP420 or nspkg
|
||||
"specs",
|
||||
"specs.azure",
|
||||
"specs.azure.example",
|
||||
]
|
||||
),
|
||||
include_package_data=True,
|
||||
package_data={
|
||||
"specs.azure.example.basic": ["py.typed"],
|
||||
},
|
||||
install_requires=[
|
||||
"isodate>=0.6.1",
|
||||
"azure-core>=1.30.0",
|
||||
"typing-extensions>=4.6.0",
|
||||
],
|
||||
python_requires=">=3.8",
|
||||
)
|
|
@ -0,0 +1 @@
|
|||
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
|
|
@ -0,0 +1 @@
|
|||
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
|
|
@ -0,0 +1 @@
|
|||
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
|
|
@ -0,0 +1,26 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from ._client import AzureExampleClient
|
||||
from ._version import VERSION
|
||||
|
||||
__version__ = VERSION
|
||||
|
||||
try:
|
||||
from ._patch import __all__ as _patch_all
|
||||
from ._patch import * # pylint: disable=unused-wildcard-import
|
||||
except ImportError:
|
||||
_patch_all = []
|
||||
from ._patch import patch_sdk as _patch_sdk
|
||||
|
||||
__all__ = [
|
||||
"AzureExampleClient",
|
||||
]
|
||||
__all__.extend([p for p in _patch_all if p not in __all__])
|
||||
|
||||
_patch_sdk()
|
|
@ -0,0 +1,90 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from copy import deepcopy
|
||||
from typing import Any
|
||||
from typing_extensions import Self
|
||||
|
||||
from azure.core import PipelineClient
|
||||
from azure.core.pipeline import policies
|
||||
from azure.core.rest import HttpRequest, HttpResponse
|
||||
|
||||
from ._configuration import AzureExampleClientConfiguration
|
||||
from ._operations import AzureExampleClientOperationsMixin
|
||||
from ._serialization import Deserializer, Serializer
|
||||
|
||||
|
||||
class AzureExampleClient(AzureExampleClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword
|
||||
"""AzureExampleClient.
|
||||
|
||||
:keyword endpoint: Service host. Default value is "http://localhost:3000".
|
||||
:paramtype endpoint: str
|
||||
:keyword api_version: The API version to use for this operation. Default value is
|
||||
"2022-12-01-preview". Note that overriding this default value may result in unsupported
|
||||
behavior.
|
||||
:paramtype api_version: str
|
||||
"""
|
||||
|
||||
def __init__( # pylint: disable=missing-client-constructor-parameter-credential
|
||||
self, *, endpoint: str = "http://localhost:3000", **kwargs: Any
|
||||
) -> None:
|
||||
self._config = AzureExampleClientConfiguration(**kwargs)
|
||||
_policies = kwargs.pop("policies", None)
|
||||
if _policies is None:
|
||||
_policies = [
|
||||
policies.RequestIdPolicy(**kwargs),
|
||||
self._config.headers_policy,
|
||||
self._config.user_agent_policy,
|
||||
self._config.proxy_policy,
|
||||
policies.ContentDecodePolicy(**kwargs),
|
||||
self._config.redirect_policy,
|
||||
self._config.retry_policy,
|
||||
self._config.authentication_policy,
|
||||
self._config.custom_hook_policy,
|
||||
self._config.logging_policy,
|
||||
policies.DistributedTracingPolicy(**kwargs),
|
||||
policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None,
|
||||
self._config.http_logging_policy,
|
||||
]
|
||||
self._client: PipelineClient = PipelineClient(base_url=endpoint, policies=_policies, **kwargs)
|
||||
|
||||
self._serialize = Serializer()
|
||||
self._deserialize = Deserializer()
|
||||
self._serialize.client_side_validation = False
|
||||
|
||||
def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse:
|
||||
"""Runs the network request through the client's chained policies.
|
||||
|
||||
>>> from azure.core.rest import HttpRequest
|
||||
>>> request = HttpRequest("GET", "https://www.example.org/")
|
||||
<HttpRequest [GET], url: 'https://www.example.org/'>
|
||||
>>> response = client.send_request(request)
|
||||
<HttpResponse: 200 OK>
|
||||
|
||||
For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request
|
||||
|
||||
:param request: The network request you want to make. Required.
|
||||
:type request: ~azure.core.rest.HttpRequest
|
||||
:keyword bool stream: Whether the response payload will be streamed. Defaults to False.
|
||||
:return: The response of your network call. Does not do error handling on your response.
|
||||
:rtype: ~azure.core.rest.HttpResponse
|
||||
"""
|
||||
|
||||
request_copy = deepcopy(request)
|
||||
request_copy.url = self._client.format_url(request_copy.url)
|
||||
return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore
|
||||
|
||||
def close(self) -> None:
|
||||
self._client.close()
|
||||
|
||||
def __enter__(self) -> Self:
|
||||
self._client.__enter__()
|
||||
return self
|
||||
|
||||
def __exit__(self, *exc_details: Any) -> None:
|
||||
self._client.__exit__(*exc_details)
|
|
@ -0,0 +1,45 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from typing import Any
|
||||
|
||||
from azure.core.pipeline import policies
|
||||
|
||||
from ._version import VERSION
|
||||
|
||||
|
||||
class AzureExampleClientConfiguration: # pylint: disable=too-many-instance-attributes,name-too-long
|
||||
"""Configuration for AzureExampleClient.
|
||||
|
||||
Note that all parameters used to create this instance are saved as instance
|
||||
attributes.
|
||||
|
||||
:keyword api_version: The API version to use for this operation. Default value is
|
||||
"2022-12-01-preview". Note that overriding this default value may result in unsupported
|
||||
behavior.
|
||||
:paramtype api_version: str
|
||||
"""
|
||||
|
||||
def __init__(self, **kwargs: Any) -> None:
|
||||
api_version: str = kwargs.pop("api_version", "2022-12-01-preview")
|
||||
|
||||
self.api_version = api_version
|
||||
kwargs.setdefault("sdk_moniker", "specs-azure-example-basic/{}".format(VERSION))
|
||||
self.polling_interval = kwargs.get("polling_interval", 30)
|
||||
self._configure(**kwargs)
|
||||
|
||||
def _configure(self, **kwargs: Any) -> None:
|
||||
self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs)
|
||||
self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs)
|
||||
self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs)
|
||||
self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs)
|
||||
self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs)
|
||||
self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs)
|
||||
self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs)
|
||||
self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs)
|
||||
self.authentication_policy = kwargs.get("authentication_policy")
|
|
@ -0,0 +1,888 @@
|
|||
# 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.
|
||||
# --------------------------------------------------------------------------
|
||||
# pylint: disable=protected-access, arguments-differ, signature-differs, broad-except
|
||||
|
||||
import copy
|
||||
import calendar
|
||||
import decimal
|
||||
import functools
|
||||
import sys
|
||||
import logging
|
||||
import base64
|
||||
import re
|
||||
import typing
|
||||
import enum
|
||||
import email.utils
|
||||
from datetime import datetime, date, time, timedelta, timezone
|
||||
from json import JSONEncoder
|
||||
from typing_extensions import Self
|
||||
import isodate
|
||||
from azure.core.exceptions import DeserializationError
|
||||
from azure.core import CaseInsensitiveEnumMeta
|
||||
from azure.core.pipeline import PipelineResponse
|
||||
from azure.core.serialization import _Null
|
||||
|
||||
if sys.version_info >= (3, 9):
|
||||
from collections.abc import MutableMapping
|
||||
else:
|
||||
from typing import MutableMapping
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
__all__ = ["SdkJSONEncoder", "Model", "rest_field", "rest_discriminator"]
|
||||
|
||||
TZ_UTC = timezone.utc
|
||||
_T = typing.TypeVar("_T")
|
||||
|
||||
|
||||
def _timedelta_as_isostr(td: timedelta) -> str:
|
||||
"""Converts a datetime.timedelta object into an ISO 8601 formatted string, e.g. 'P4DT12H30M05S'
|
||||
|
||||
Function adapted from the Tin Can Python project: https://github.com/RusticiSoftware/TinCanPython
|
||||
|
||||
:param timedelta td: The timedelta to convert
|
||||
:rtype: str
|
||||
:return: ISO8601 version of this timedelta
|
||||
"""
|
||||
|
||||
# Split seconds to larger units
|
||||
seconds = td.total_seconds()
|
||||
minutes, seconds = divmod(seconds, 60)
|
||||
hours, minutes = divmod(minutes, 60)
|
||||
days, hours = divmod(hours, 24)
|
||||
|
||||
days, hours, minutes = list(map(int, (days, hours, minutes)))
|
||||
seconds = round(seconds, 6)
|
||||
|
||||
# Build date
|
||||
date_str = ""
|
||||
if days:
|
||||
date_str = "%sD" % days
|
||||
|
||||
if hours or minutes or seconds:
|
||||
# Build time
|
||||
time_str = "T"
|
||||
|
||||
# Hours
|
||||
bigger_exists = date_str or hours
|
||||
if bigger_exists:
|
||||
time_str += "{:02}H".format(hours)
|
||||
|
||||
# Minutes
|
||||
bigger_exists = bigger_exists or minutes
|
||||
if bigger_exists:
|
||||
time_str += "{:02}M".format(minutes)
|
||||
|
||||
# Seconds
|
||||
try:
|
||||
if seconds.is_integer():
|
||||
seconds_string = "{:02}".format(int(seconds))
|
||||
else:
|
||||
# 9 chars long w/ leading 0, 6 digits after decimal
|
||||
seconds_string = "%09.6f" % seconds
|
||||
# Remove trailing zeros
|
||||
seconds_string = seconds_string.rstrip("0")
|
||||
except AttributeError: # int.is_integer() raises
|
||||
seconds_string = "{:02}".format(seconds)
|
||||
|
||||
time_str += "{}S".format(seconds_string)
|
||||
else:
|
||||
time_str = ""
|
||||
|
||||
return "P" + date_str + time_str
|
||||
|
||||
|
||||
def _serialize_bytes(o, format: typing.Optional[str] = None) -> str:
|
||||
encoded = base64.b64encode(o).decode()
|
||||
if format == "base64url":
|
||||
return encoded.strip("=").replace("+", "-").replace("/", "_")
|
||||
return encoded
|
||||
|
||||
|
||||
def _serialize_datetime(o, format: typing.Optional[str] = None):
|
||||
if hasattr(o, "year") and hasattr(o, "hour"):
|
||||
if format == "rfc7231":
|
||||
return email.utils.format_datetime(o, usegmt=True)
|
||||
if format == "unix-timestamp":
|
||||
return int(calendar.timegm(o.utctimetuple()))
|
||||
|
||||
# astimezone() fails for naive times in Python 2.7, so make make sure o is aware (tzinfo is set)
|
||||
if not o.tzinfo:
|
||||
iso_formatted = o.replace(tzinfo=TZ_UTC).isoformat()
|
||||
else:
|
||||
iso_formatted = o.astimezone(TZ_UTC).isoformat()
|
||||
# Replace the trailing "+00:00" UTC offset with "Z" (RFC 3339: https://www.ietf.org/rfc/rfc3339.txt)
|
||||
return iso_formatted.replace("+00:00", "Z")
|
||||
# Next try datetime.date or datetime.time
|
||||
return o.isoformat()
|
||||
|
||||
|
||||
def _is_readonly(p):
|
||||
try:
|
||||
return p._visibility == ["read"] # pylint: disable=protected-access
|
||||
except AttributeError:
|
||||
return False
|
||||
|
||||
|
||||
class SdkJSONEncoder(JSONEncoder):
|
||||
"""A JSON encoder that's capable of serializing datetime objects and bytes."""
|
||||
|
||||
def __init__(self, *args, exclude_readonly: bool = False, format: typing.Optional[str] = None, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.exclude_readonly = exclude_readonly
|
||||
self.format = format
|
||||
|
||||
def default(self, o): # pylint: disable=too-many-return-statements
|
||||
if _is_model(o):
|
||||
if self.exclude_readonly:
|
||||
readonly_props = [p._rest_name for p in o._attr_to_rest_field.values() if _is_readonly(p)]
|
||||
return {k: v for k, v in o.items() if k not in readonly_props}
|
||||
return dict(o.items())
|
||||
try:
|
||||
return super(SdkJSONEncoder, self).default(o)
|
||||
except TypeError:
|
||||
if isinstance(o, _Null):
|
||||
return None
|
||||
if isinstance(o, decimal.Decimal):
|
||||
return float(o)
|
||||
if isinstance(o, (bytes, bytearray)):
|
||||
return _serialize_bytes(o, self.format)
|
||||
try:
|
||||
# First try datetime.datetime
|
||||
return _serialize_datetime(o, self.format)
|
||||
except AttributeError:
|
||||
pass
|
||||
# Last, try datetime.timedelta
|
||||
try:
|
||||
return _timedelta_as_isostr(o)
|
||||
except AttributeError:
|
||||
# This will be raised when it hits value.total_seconds in the method above
|
||||
pass
|
||||
return super(SdkJSONEncoder, self).default(o)
|
||||
|
||||
|
||||
_VALID_DATE = re.compile(r"\d{4}[-]\d{2}[-]\d{2}T\d{2}:\d{2}:\d{2}" + r"\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?")
|
||||
_VALID_RFC7231 = re.compile(
|
||||
r"(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{2}\s"
|
||||
r"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT"
|
||||
)
|
||||
|
||||
|
||||
def _deserialize_datetime(attr: typing.Union[str, datetime]) -> datetime:
|
||||
"""Deserialize ISO-8601 formatted string into Datetime object.
|
||||
|
||||
:param str attr: response string to be deserialized.
|
||||
:rtype: ~datetime.datetime
|
||||
:returns: The datetime object from that input
|
||||
"""
|
||||
if isinstance(attr, datetime):
|
||||
# i'm already deserialized
|
||||
return attr
|
||||
attr = attr.upper()
|
||||
match = _VALID_DATE.match(attr)
|
||||
if not match:
|
||||
raise ValueError("Invalid datetime string: " + attr)
|
||||
|
||||
check_decimal = attr.split(".")
|
||||
if len(check_decimal) > 1:
|
||||
decimal_str = ""
|
||||
for digit in check_decimal[1]:
|
||||
if digit.isdigit():
|
||||
decimal_str += digit
|
||||
else:
|
||||
break
|
||||
if len(decimal_str) > 6:
|
||||
attr = attr.replace(decimal_str, decimal_str[0:6])
|
||||
|
||||
date_obj = isodate.parse_datetime(attr)
|
||||
test_utc = date_obj.utctimetuple()
|
||||
if test_utc.tm_year > 9999 or test_utc.tm_year < 1:
|
||||
raise OverflowError("Hit max or min date")
|
||||
return date_obj
|
||||
|
||||
|
||||
def _deserialize_datetime_rfc7231(attr: typing.Union[str, datetime]) -> datetime:
|
||||
"""Deserialize RFC7231 formatted string into Datetime object.
|
||||
|
||||
:param str attr: response string to be deserialized.
|
||||
:rtype: ~datetime.datetime
|
||||
:returns: The datetime object from that input
|
||||
"""
|
||||
if isinstance(attr, datetime):
|
||||
# i'm already deserialized
|
||||
return attr
|
||||
match = _VALID_RFC7231.match(attr)
|
||||
if not match:
|
||||
raise ValueError("Invalid datetime string: " + attr)
|
||||
|
||||
return email.utils.parsedate_to_datetime(attr)
|
||||
|
||||
|
||||
def _deserialize_datetime_unix_timestamp(attr: typing.Union[float, datetime]) -> datetime:
|
||||
"""Deserialize unix timestamp into Datetime object.
|
||||
|
||||
:param str attr: response string to be deserialized.
|
||||
:rtype: ~datetime.datetime
|
||||
:returns: The datetime object from that input
|
||||
"""
|
||||
if isinstance(attr, datetime):
|
||||
# i'm already deserialized
|
||||
return attr
|
||||
return datetime.fromtimestamp(attr, TZ_UTC)
|
||||
|
||||
|
||||
def _deserialize_date(attr: typing.Union[str, date]) -> date:
|
||||
"""Deserialize ISO-8601 formatted string into Date object.
|
||||
:param str attr: response string to be deserialized.
|
||||
:rtype: date
|
||||
:returns: The date object from that input
|
||||
"""
|
||||
# This must NOT use defaultmonth/defaultday. Using None ensure this raises an exception.
|
||||
if isinstance(attr, date):
|
||||
return attr
|
||||
return isodate.parse_date(attr, defaultmonth=None, defaultday=None) # type: ignore
|
||||
|
||||
|
||||
def _deserialize_time(attr: typing.Union[str, time]) -> time:
|
||||
"""Deserialize ISO-8601 formatted string into time object.
|
||||
|
||||
:param str attr: response string to be deserialized.
|
||||
:rtype: datetime.time
|
||||
:returns: The time object from that input
|
||||
"""
|
||||
if isinstance(attr, time):
|
||||
return attr
|
||||
return isodate.parse_time(attr)
|
||||
|
||||
|
||||
def _deserialize_bytes(attr):
|
||||
if isinstance(attr, (bytes, bytearray)):
|
||||
return attr
|
||||
return bytes(base64.b64decode(attr))
|
||||
|
||||
|
||||
def _deserialize_bytes_base64(attr):
|
||||
if isinstance(attr, (bytes, bytearray)):
|
||||
return attr
|
||||
padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore
|
||||
attr = attr + padding # type: ignore
|
||||
encoded = attr.replace("-", "+").replace("_", "/")
|
||||
return bytes(base64.b64decode(encoded))
|
||||
|
||||
|
||||
def _deserialize_duration(attr):
|
||||
if isinstance(attr, timedelta):
|
||||
return attr
|
||||
return isodate.parse_duration(attr)
|
||||
|
||||
|
||||
def _deserialize_decimal(attr):
|
||||
if isinstance(attr, decimal.Decimal):
|
||||
return attr
|
||||
return decimal.Decimal(str(attr))
|
||||
|
||||
|
||||
_DESERIALIZE_MAPPING = {
|
||||
datetime: _deserialize_datetime,
|
||||
date: _deserialize_date,
|
||||
time: _deserialize_time,
|
||||
bytes: _deserialize_bytes,
|
||||
bytearray: _deserialize_bytes,
|
||||
timedelta: _deserialize_duration,
|
||||
typing.Any: lambda x: x,
|
||||
decimal.Decimal: _deserialize_decimal,
|
||||
}
|
||||
|
||||
_DESERIALIZE_MAPPING_WITHFORMAT = {
|
||||
"rfc3339": _deserialize_datetime,
|
||||
"rfc7231": _deserialize_datetime_rfc7231,
|
||||
"unix-timestamp": _deserialize_datetime_unix_timestamp,
|
||||
"base64": _deserialize_bytes,
|
||||
"base64url": _deserialize_bytes_base64,
|
||||
}
|
||||
|
||||
|
||||
def get_deserializer(annotation: typing.Any, rf: typing.Optional["_RestField"] = None):
|
||||
if rf and rf._format:
|
||||
return _DESERIALIZE_MAPPING_WITHFORMAT.get(rf._format)
|
||||
return _DESERIALIZE_MAPPING.get(annotation)
|
||||
|
||||
|
||||
def _get_type_alias_type(module_name: str, alias_name: str):
|
||||
types = {
|
||||
k: v
|
||||
for k, v in sys.modules[module_name].__dict__.items()
|
||||
if isinstance(v, typing._GenericAlias) # type: ignore
|
||||
}
|
||||
if alias_name not in types:
|
||||
return alias_name
|
||||
return types[alias_name]
|
||||
|
||||
|
||||
def _get_model(module_name: str, model_name: str):
|
||||
models = {k: v for k, v in sys.modules[module_name].__dict__.items() if isinstance(v, type)}
|
||||
module_end = module_name.rsplit(".", 1)[0]
|
||||
models.update({k: v for k, v in sys.modules[module_end].__dict__.items() if isinstance(v, type)})
|
||||
if isinstance(model_name, str):
|
||||
model_name = model_name.split(".")[-1]
|
||||
if model_name not in models:
|
||||
return model_name
|
||||
return models[model_name]
|
||||
|
||||
|
||||
_UNSET = object()
|
||||
|
||||
|
||||
class _MyMutableMapping(MutableMapping[str, typing.Any]): # pylint: disable=unsubscriptable-object
|
||||
def __init__(self, data: typing.Dict[str, typing.Any]) -> None:
|
||||
self._data = data
|
||||
|
||||
def __contains__(self, key: typing.Any) -> bool:
|
||||
return key in self._data
|
||||
|
||||
def __getitem__(self, key: str) -> typing.Any:
|
||||
return self._data.__getitem__(key)
|
||||
|
||||
def __setitem__(self, key: str, value: typing.Any) -> None:
|
||||
self._data.__setitem__(key, value)
|
||||
|
||||
def __delitem__(self, key: str) -> None:
|
||||
self._data.__delitem__(key)
|
||||
|
||||
def __iter__(self) -> typing.Iterator[typing.Any]:
|
||||
return self._data.__iter__()
|
||||
|
||||
def __len__(self) -> int:
|
||||
return self._data.__len__()
|
||||
|
||||
def __ne__(self, other: typing.Any) -> bool:
|
||||
return not self.__eq__(other)
|
||||
|
||||
def keys(self) -> typing.KeysView[str]:
|
||||
return self._data.keys()
|
||||
|
||||
def values(self) -> typing.ValuesView[typing.Any]:
|
||||
return self._data.values()
|
||||
|
||||
def items(self) -> typing.ItemsView[str, typing.Any]:
|
||||
return self._data.items()
|
||||
|
||||
def get(self, key: str, default: typing.Any = None) -> typing.Any:
|
||||
try:
|
||||
return self[key]
|
||||
except KeyError:
|
||||
return default
|
||||
|
||||
@typing.overload
|
||||
def pop(self, key: str) -> typing.Any: ...
|
||||
|
||||
@typing.overload
|
||||
def pop(self, key: str, default: _T) -> _T: ...
|
||||
|
||||
@typing.overload
|
||||
def pop(self, key: str, default: typing.Any) -> typing.Any: ...
|
||||
|
||||
def pop(self, key: str, default: typing.Any = _UNSET) -> typing.Any:
|
||||
if default is _UNSET:
|
||||
return self._data.pop(key)
|
||||
return self._data.pop(key, default)
|
||||
|
||||
def popitem(self) -> typing.Tuple[str, typing.Any]:
|
||||
return self._data.popitem()
|
||||
|
||||
def clear(self) -> None:
|
||||
self._data.clear()
|
||||
|
||||
def update(self, *args: typing.Any, **kwargs: typing.Any) -> None:
|
||||
self._data.update(*args, **kwargs)
|
||||
|
||||
@typing.overload
|
||||
def setdefault(self, key: str, default: None = None) -> None: ...
|
||||
|
||||
@typing.overload
|
||||
def setdefault(self, key: str, default: typing.Any) -> typing.Any: ...
|
||||
|
||||
def setdefault(self, key: str, default: typing.Any = _UNSET) -> typing.Any:
|
||||
if default is _UNSET:
|
||||
return self._data.setdefault(key)
|
||||
return self._data.setdefault(key, default)
|
||||
|
||||
def __eq__(self, other: typing.Any) -> bool:
|
||||
try:
|
||||
other_model = self.__class__(other)
|
||||
except Exception:
|
||||
return False
|
||||
return self._data == other_model._data
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return str(self._data)
|
||||
|
||||
|
||||
def _is_model(obj: typing.Any) -> bool:
|
||||
return getattr(obj, "_is_model", False)
|
||||
|
||||
|
||||
def _serialize(o, format: typing.Optional[str] = None): # pylint: disable=too-many-return-statements
|
||||
if isinstance(o, list):
|
||||
return [_serialize(x, format) for x in o]
|
||||
if isinstance(o, dict):
|
||||
return {k: _serialize(v, format) for k, v in o.items()}
|
||||
if isinstance(o, set):
|
||||
return {_serialize(x, format) for x in o}
|
||||
if isinstance(o, tuple):
|
||||
return tuple(_serialize(x, format) for x in o)
|
||||
if isinstance(o, (bytes, bytearray)):
|
||||
return _serialize_bytes(o, format)
|
||||
if isinstance(o, decimal.Decimal):
|
||||
return float(o)
|
||||
if isinstance(o, enum.Enum):
|
||||
return o.value
|
||||
try:
|
||||
# First try datetime.datetime
|
||||
return _serialize_datetime(o, format)
|
||||
except AttributeError:
|
||||
pass
|
||||
# Last, try datetime.timedelta
|
||||
try:
|
||||
return _timedelta_as_isostr(o)
|
||||
except AttributeError:
|
||||
# This will be raised when it hits value.total_seconds in the method above
|
||||
pass
|
||||
return o
|
||||
|
||||
|
||||
def _get_rest_field(
|
||||
attr_to_rest_field: typing.Dict[str, "_RestField"], rest_name: str
|
||||
) -> typing.Optional["_RestField"]:
|
||||
try:
|
||||
return next(rf for rf in attr_to_rest_field.values() if rf._rest_name == rest_name)
|
||||
except StopIteration:
|
||||
return None
|
||||
|
||||
|
||||
def _create_value(rf: typing.Optional["_RestField"], value: typing.Any) -> typing.Any:
|
||||
if not rf:
|
||||
return _serialize(value, None)
|
||||
if rf._is_multipart_file_input:
|
||||
return value
|
||||
if rf._is_model:
|
||||
return _deserialize(rf._type, value)
|
||||
return _serialize(value, rf._format)
|
||||
|
||||
|
||||
class Model(_MyMutableMapping):
|
||||
_is_model = True
|
||||
|
||||
def __init__(self, *args: typing.Any, **kwargs: typing.Any) -> None:
|
||||
class_name = self.__class__.__name__
|
||||
if len(args) > 1:
|
||||
raise TypeError(f"{class_name}.__init__() takes 2 positional arguments but {len(args) + 1} were given")
|
||||
dict_to_pass = {
|
||||
rest_field._rest_name: rest_field._default
|
||||
for rest_field in self._attr_to_rest_field.values()
|
||||
if rest_field._default is not _UNSET
|
||||
}
|
||||
if args:
|
||||
dict_to_pass.update(
|
||||
{k: _create_value(_get_rest_field(self._attr_to_rest_field, k), v) for k, v in args[0].items()}
|
||||
)
|
||||
else:
|
||||
non_attr_kwargs = [k for k in kwargs if k not in self._attr_to_rest_field]
|
||||
if non_attr_kwargs:
|
||||
# actual type errors only throw the first wrong keyword arg they see, so following that.
|
||||
raise TypeError(f"{class_name}.__init__() got an unexpected keyword argument '{non_attr_kwargs[0]}'")
|
||||
dict_to_pass.update(
|
||||
{
|
||||
self._attr_to_rest_field[k]._rest_name: _create_value(self._attr_to_rest_field[k], v)
|
||||
for k, v in kwargs.items()
|
||||
if v is not None
|
||||
}
|
||||
)
|
||||
super().__init__(dict_to_pass)
|
||||
|
||||
def copy(self) -> "Model":
|
||||
return Model(self.__dict__)
|
||||
|
||||
def __new__(cls, *args: typing.Any, **kwargs: typing.Any) -> Self: # pylint: disable=unused-argument
|
||||
# we know the last three classes in mro are going to be 'Model', 'dict', and 'object'
|
||||
mros = cls.__mro__[:-3][::-1] # ignore model, dict, and object parents, and reverse the mro order
|
||||
attr_to_rest_field: typing.Dict[str, _RestField] = { # map attribute name to rest_field property
|
||||
k: v for mro_class in mros for k, v in mro_class.__dict__.items() if k[0] != "_" and hasattr(v, "_type")
|
||||
}
|
||||
annotations = {
|
||||
k: v
|
||||
for mro_class in mros
|
||||
if hasattr(mro_class, "__annotations__") # pylint: disable=no-member
|
||||
for k, v in mro_class.__annotations__.items() # pylint: disable=no-member
|
||||
}
|
||||
for attr, rf in attr_to_rest_field.items():
|
||||
rf._module = cls.__module__
|
||||
if not rf._type:
|
||||
rf._type = rf._get_deserialize_callable_from_annotation(annotations.get(attr, None))
|
||||
if not rf._rest_name_input:
|
||||
rf._rest_name_input = attr
|
||||
cls._attr_to_rest_field: typing.Dict[str, _RestField] = dict(attr_to_rest_field.items())
|
||||
|
||||
return super().__new__(cls) # pylint: disable=no-value-for-parameter
|
||||
|
||||
def __init_subclass__(cls, discriminator: typing.Optional[str] = None) -> None:
|
||||
for base in cls.__bases__:
|
||||
if hasattr(base, "__mapping__"): # pylint: disable=no-member
|
||||
base.__mapping__[discriminator or cls.__name__] = cls # type: ignore # pylint: disable=no-member
|
||||
|
||||
@classmethod
|
||||
def _get_discriminator(cls, exist_discriminators) -> typing.Optional[str]:
|
||||
for v in cls.__dict__.values():
|
||||
if (
|
||||
isinstance(v, _RestField) and v._is_discriminator and v._rest_name not in exist_discriminators
|
||||
): # pylint: disable=protected-access
|
||||
return v._rest_name # pylint: disable=protected-access
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def _deserialize(cls, data, exist_discriminators):
|
||||
if not hasattr(cls, "__mapping__"): # pylint: disable=no-member
|
||||
return cls(data)
|
||||
discriminator = cls._get_discriminator(exist_discriminators)
|
||||
exist_discriminators.append(discriminator)
|
||||
mapped_cls = cls.__mapping__.get(data.get(discriminator), cls) # pyright: ignore # pylint: disable=no-member
|
||||
if mapped_cls == cls:
|
||||
return cls(data)
|
||||
return mapped_cls._deserialize(data, exist_discriminators) # pylint: disable=protected-access
|
||||
|
||||
def as_dict(self, *, exclude_readonly: bool = False) -> typing.Dict[str, typing.Any]:
|
||||
"""Return a dict that can be JSONify using json.dump.
|
||||
|
||||
:keyword bool exclude_readonly: Whether to remove the readonly properties.
|
||||
:returns: A dict JSON compatible object
|
||||
:rtype: dict
|
||||
"""
|
||||
|
||||
result = {}
|
||||
if exclude_readonly:
|
||||
readonly_props = [p._rest_name for p in self._attr_to_rest_field.values() if _is_readonly(p)]
|
||||
for k, v in self.items():
|
||||
if exclude_readonly and k in readonly_props: # pyright: ignore
|
||||
continue
|
||||
is_multipart_file_input = False
|
||||
try:
|
||||
is_multipart_file_input = next(
|
||||
rf for rf in self._attr_to_rest_field.values() if rf._rest_name == k
|
||||
)._is_multipart_file_input
|
||||
except StopIteration:
|
||||
pass
|
||||
result[k] = v if is_multipart_file_input else Model._as_dict_value(v, exclude_readonly=exclude_readonly)
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def _as_dict_value(v: typing.Any, exclude_readonly: bool = False) -> typing.Any:
|
||||
if v is None or isinstance(v, _Null):
|
||||
return None
|
||||
if isinstance(v, (list, tuple, set)):
|
||||
return type(v)(Model._as_dict_value(x, exclude_readonly=exclude_readonly) for x in v)
|
||||
if isinstance(v, dict):
|
||||
return {dk: Model._as_dict_value(dv, exclude_readonly=exclude_readonly) for dk, dv in v.items()}
|
||||
return v.as_dict(exclude_readonly=exclude_readonly) if hasattr(v, "as_dict") else v
|
||||
|
||||
|
||||
def _deserialize_model(model_deserializer: typing.Optional[typing.Callable], obj):
|
||||
if _is_model(obj):
|
||||
return obj
|
||||
return _deserialize(model_deserializer, obj)
|
||||
|
||||
|
||||
def _deserialize_with_optional(if_obj_deserializer: typing.Optional[typing.Callable], obj):
|
||||
if obj is None:
|
||||
return obj
|
||||
return _deserialize_with_callable(if_obj_deserializer, obj)
|
||||
|
||||
|
||||
def _deserialize_with_union(deserializers, obj):
|
||||
for deserializer in deserializers:
|
||||
try:
|
||||
return _deserialize(deserializer, obj)
|
||||
except DeserializationError:
|
||||
pass
|
||||
raise DeserializationError()
|
||||
|
||||
|
||||
def _deserialize_dict(
|
||||
value_deserializer: typing.Optional[typing.Callable],
|
||||
module: typing.Optional[str],
|
||||
obj: typing.Dict[typing.Any, typing.Any],
|
||||
):
|
||||
if obj is None:
|
||||
return obj
|
||||
return {k: _deserialize(value_deserializer, v, module) for k, v in obj.items()}
|
||||
|
||||
|
||||
def _deserialize_multiple_sequence(
|
||||
entry_deserializers: typing.List[typing.Optional[typing.Callable]],
|
||||
module: typing.Optional[str],
|
||||
obj,
|
||||
):
|
||||
if obj is None:
|
||||
return obj
|
||||
return type(obj)(_deserialize(deserializer, entry, module) for entry, deserializer in zip(obj, entry_deserializers))
|
||||
|
||||
|
||||
def _deserialize_sequence(
|
||||
deserializer: typing.Optional[typing.Callable],
|
||||
module: typing.Optional[str],
|
||||
obj,
|
||||
):
|
||||
if obj is None:
|
||||
return obj
|
||||
return type(obj)(_deserialize(deserializer, entry, module) for entry in obj)
|
||||
|
||||
|
||||
def _sorted_annotations(types: typing.List[typing.Any]) -> typing.List[typing.Any]:
|
||||
return sorted(
|
||||
types,
|
||||
key=lambda x: hasattr(x, "__name__") and x.__name__.lower() in ("str", "float", "int", "bool"),
|
||||
)
|
||||
|
||||
|
||||
def _get_deserialize_callable_from_annotation( # pylint: disable=R0911, R0915, R0912
|
||||
annotation: typing.Any,
|
||||
module: typing.Optional[str],
|
||||
rf: typing.Optional["_RestField"] = None,
|
||||
) -> typing.Optional[typing.Callable[[typing.Any], typing.Any]]:
|
||||
if not annotation or annotation in [int, float]:
|
||||
return None
|
||||
|
||||
# is it a type alias?
|
||||
if isinstance(annotation, str):
|
||||
if module is not None:
|
||||
annotation = _get_type_alias_type(module, annotation)
|
||||
|
||||
# is it a forward ref / in quotes?
|
||||
if isinstance(annotation, (str, typing.ForwardRef)):
|
||||
try:
|
||||
model_name = annotation.__forward_arg__ # type: ignore
|
||||
except AttributeError:
|
||||
model_name = annotation
|
||||
if module is not None:
|
||||
annotation = _get_model(module, model_name)
|
||||
|
||||
try:
|
||||
if module and _is_model(annotation):
|
||||
if rf:
|
||||
rf._is_model = True
|
||||
|
||||
return functools.partial(_deserialize_model, annotation) # pyright: ignore
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# is it a literal?
|
||||
try:
|
||||
if annotation.__origin__ is typing.Literal: # pyright: ignore
|
||||
return None
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
# is it optional?
|
||||
try:
|
||||
if any(a for a in annotation.__args__ if a == type(None)): # pyright: ignore
|
||||
if len(annotation.__args__) <= 2: # pyright: ignore
|
||||
if_obj_deserializer = _get_deserialize_callable_from_annotation(
|
||||
next(a for a in annotation.__args__ if a != type(None)), module, rf # pyright: ignore
|
||||
)
|
||||
|
||||
return functools.partial(_deserialize_with_optional, if_obj_deserializer)
|
||||
# the type is Optional[Union[...]], we need to remove the None type from the Union
|
||||
annotation_copy = copy.copy(annotation)
|
||||
annotation_copy.__args__ = [a for a in annotation_copy.__args__ if a != type(None)] # pyright: ignore
|
||||
return _get_deserialize_callable_from_annotation(annotation_copy, module, rf)
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
# is it union?
|
||||
if getattr(annotation, "__origin__", None) is typing.Union:
|
||||
# initial ordering is we make `string` the last deserialization option, because it is often them most generic
|
||||
deserializers = [
|
||||
_get_deserialize_callable_from_annotation(arg, module, rf)
|
||||
for arg in _sorted_annotations(annotation.__args__) # pyright: ignore
|
||||
]
|
||||
|
||||
return functools.partial(_deserialize_with_union, deserializers)
|
||||
|
||||
try:
|
||||
if annotation._name == "Dict": # pyright: ignore
|
||||
value_deserializer = _get_deserialize_callable_from_annotation(
|
||||
annotation.__args__[1], module, rf # pyright: ignore
|
||||
)
|
||||
|
||||
return functools.partial(
|
||||
_deserialize_dict,
|
||||
value_deserializer,
|
||||
module,
|
||||
)
|
||||
except (AttributeError, IndexError):
|
||||
pass
|
||||
try:
|
||||
if annotation._name in ["List", "Set", "Tuple", "Sequence"]: # pyright: ignore
|
||||
if len(annotation.__args__) > 1: # pyright: ignore
|
||||
|
||||
entry_deserializers = [
|
||||
_get_deserialize_callable_from_annotation(dt, module, rf)
|
||||
for dt in annotation.__args__ # pyright: ignore
|
||||
]
|
||||
return functools.partial(_deserialize_multiple_sequence, entry_deserializers, module)
|
||||
deserializer = _get_deserialize_callable_from_annotation(
|
||||
annotation.__args__[0], module, rf # pyright: ignore
|
||||
)
|
||||
|
||||
return functools.partial(_deserialize_sequence, deserializer, module)
|
||||
except (TypeError, IndexError, AttributeError, SyntaxError):
|
||||
pass
|
||||
|
||||
def _deserialize_default(
|
||||
deserializer,
|
||||
obj,
|
||||
):
|
||||
if obj is None:
|
||||
return obj
|
||||
try:
|
||||
return _deserialize_with_callable(deserializer, obj)
|
||||
except Exception:
|
||||
pass
|
||||
return obj
|
||||
|
||||
if get_deserializer(annotation, rf):
|
||||
return functools.partial(_deserialize_default, get_deserializer(annotation, rf))
|
||||
|
||||
return functools.partial(_deserialize_default, annotation)
|
||||
|
||||
|
||||
def _deserialize_with_callable(
|
||||
deserializer: typing.Optional[typing.Callable[[typing.Any], typing.Any]],
|
||||
value: typing.Any,
|
||||
):
|
||||
try:
|
||||
if value is None or isinstance(value, _Null):
|
||||
return None
|
||||
if deserializer is None:
|
||||
return value
|
||||
if isinstance(deserializer, CaseInsensitiveEnumMeta):
|
||||
try:
|
||||
return deserializer(value)
|
||||
except ValueError:
|
||||
# for unknown value, return raw value
|
||||
return value
|
||||
if isinstance(deserializer, type) and issubclass(deserializer, Model):
|
||||
return deserializer._deserialize(value, [])
|
||||
return typing.cast(typing.Callable[[typing.Any], typing.Any], deserializer)(value)
|
||||
except Exception as e:
|
||||
raise DeserializationError() from e
|
||||
|
||||
|
||||
def _deserialize(
|
||||
deserializer: typing.Any,
|
||||
value: typing.Any,
|
||||
module: typing.Optional[str] = None,
|
||||
rf: typing.Optional["_RestField"] = None,
|
||||
format: typing.Optional[str] = None,
|
||||
) -> typing.Any:
|
||||
if isinstance(value, PipelineResponse):
|
||||
value = value.http_response.json()
|
||||
if rf is None and format:
|
||||
rf = _RestField(format=format)
|
||||
if not isinstance(deserializer, functools.partial):
|
||||
deserializer = _get_deserialize_callable_from_annotation(deserializer, module, rf)
|
||||
return _deserialize_with_callable(deserializer, value)
|
||||
|
||||
|
||||
class _RestField:
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
name: typing.Optional[str] = None,
|
||||
type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin
|
||||
is_discriminator: bool = False,
|
||||
visibility: typing.Optional[typing.List[str]] = None,
|
||||
default: typing.Any = _UNSET,
|
||||
format: typing.Optional[str] = None,
|
||||
is_multipart_file_input: bool = False,
|
||||
):
|
||||
self._type = type
|
||||
self._rest_name_input = name
|
||||
self._module: typing.Optional[str] = None
|
||||
self._is_discriminator = is_discriminator
|
||||
self._visibility = visibility
|
||||
self._is_model = False
|
||||
self._default = default
|
||||
self._format = format
|
||||
self._is_multipart_file_input = is_multipart_file_input
|
||||
|
||||
@property
|
||||
def _class_type(self) -> typing.Any:
|
||||
return getattr(self._type, "args", [None])[0]
|
||||
|
||||
@property
|
||||
def _rest_name(self) -> str:
|
||||
if self._rest_name_input is None:
|
||||
raise ValueError("Rest name was never set")
|
||||
return self._rest_name_input
|
||||
|
||||
def __get__(self, obj: Model, type=None): # pylint: disable=redefined-builtin
|
||||
# by this point, type and rest_name will have a value bc we default
|
||||
# them in __new__ of the Model class
|
||||
item = obj.get(self._rest_name)
|
||||
if item is None:
|
||||
return item
|
||||
if self._is_model:
|
||||
return item
|
||||
return _deserialize(self._type, _serialize(item, self._format), rf=self)
|
||||
|
||||
def __set__(self, obj: Model, value) -> None:
|
||||
if value is None:
|
||||
# we want to wipe out entries if users set attr to None
|
||||
try:
|
||||
obj.__delitem__(self._rest_name)
|
||||
except KeyError:
|
||||
pass
|
||||
return
|
||||
if self._is_model:
|
||||
if not _is_model(value):
|
||||
value = _deserialize(self._type, value)
|
||||
obj.__setitem__(self._rest_name, value)
|
||||
return
|
||||
obj.__setitem__(self._rest_name, _serialize(value, self._format))
|
||||
|
||||
def _get_deserialize_callable_from_annotation(
|
||||
self, annotation: typing.Any
|
||||
) -> typing.Optional[typing.Callable[[typing.Any], typing.Any]]:
|
||||
return _get_deserialize_callable_from_annotation(annotation, self._module, self)
|
||||
|
||||
|
||||
def rest_field(
|
||||
*,
|
||||
name: typing.Optional[str] = None,
|
||||
type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin
|
||||
visibility: typing.Optional[typing.List[str]] = None,
|
||||
default: typing.Any = _UNSET,
|
||||
format: typing.Optional[str] = None,
|
||||
is_multipart_file_input: bool = False,
|
||||
) -> typing.Any:
|
||||
return _RestField(
|
||||
name=name,
|
||||
type=type,
|
||||
visibility=visibility,
|
||||
default=default,
|
||||
format=format,
|
||||
is_multipart_file_input=is_multipart_file_input,
|
||||
)
|
||||
|
||||
|
||||
def rest_discriminator(
|
||||
*,
|
||||
name: typing.Optional[str] = None,
|
||||
type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin
|
||||
visibility: typing.Optional[typing.List[str]] = None,
|
||||
) -> typing.Any:
|
||||
return _RestField(name=name, type=type, is_discriminator=True, visibility=visibility)
|
|
@ -0,0 +1,19 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from ._operations import AzureExampleClientOperationsMixin
|
||||
|
||||
from ._patch import __all__ as _patch_all
|
||||
from ._patch import * # pylint: disable=unused-wildcard-import
|
||||
from ._patch import patch_sdk as _patch_sdk
|
||||
|
||||
__all__ = [
|
||||
"AzureExampleClientOperationsMixin",
|
||||
]
|
||||
__all__.extend([p for p in _patch_all if p not in __all__])
|
||||
_patch_sdk()
|
|
@ -0,0 +1,324 @@
|
|||
# pylint: disable=too-many-lines,too-many-statements
|
||||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
from io import IOBase
|
||||
import json
|
||||
import sys
|
||||
from typing import Any, Callable, Dict, IO, Optional, Type, TypeVar, Union, overload
|
||||
|
||||
from azure.core.exceptions import (
|
||||
ClientAuthenticationError,
|
||||
HttpResponseError,
|
||||
ResourceExistsError,
|
||||
ResourceNotFoundError,
|
||||
ResourceNotModifiedError,
|
||||
StreamClosedError,
|
||||
StreamConsumedError,
|
||||
map_error,
|
||||
)
|
||||
from azure.core.pipeline import PipelineResponse
|
||||
from azure.core.rest import HttpRequest, HttpResponse
|
||||
from azure.core.tracing.decorator import distributed_trace
|
||||
from azure.core.utils import case_insensitive_dict
|
||||
|
||||
from .. import models as _models
|
||||
from .._model_base import SdkJSONEncoder, _deserialize
|
||||
from .._serialization import Serializer
|
||||
from .._vendor import AzureExampleClientMixinABC
|
||||
|
||||
if sys.version_info >= (3, 9):
|
||||
from collections.abc import MutableMapping
|
||||
else:
|
||||
from typing import MutableMapping # type: ignore # pylint: disable=ungrouped-imports
|
||||
JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object
|
||||
T = TypeVar("T")
|
||||
ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]]
|
||||
|
||||
_SERIALIZER = Serializer()
|
||||
_SERIALIZER.client_side_validation = False
|
||||
|
||||
|
||||
def build_azure_example_basic_action_request(*, query_param: str, header_param: str, **kwargs: Any) -> HttpRequest:
|
||||
_headers = case_insensitive_dict(kwargs.pop("headers", {}) or {})
|
||||
_params = case_insensitive_dict(kwargs.pop("params", {}) or {})
|
||||
|
||||
content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None))
|
||||
api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2022-12-01-preview"))
|
||||
accept = _headers.pop("Accept", "application/json")
|
||||
|
||||
# Construct URL
|
||||
_url = "/azure/example/basic/basic"
|
||||
|
||||
# Construct parameters
|
||||
_params["api-version"] = _SERIALIZER.query("api_version", api_version, "str")
|
||||
_params["query-param"] = _SERIALIZER.query("query_param", query_param, "str")
|
||||
|
||||
# Construct headers
|
||||
_headers["header-param"] = _SERIALIZER.header("header_param", header_param, "str")
|
||||
if content_type is not None:
|
||||
_headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str")
|
||||
_headers["Accept"] = _SERIALIZER.header("accept", accept, "str")
|
||||
|
||||
return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs)
|
||||
|
||||
|
||||
class AzureExampleClientOperationsMixin(AzureExampleClientMixinABC):
|
||||
|
||||
@overload
|
||||
def basic_action(
|
||||
self,
|
||||
body: _models.ActionRequest,
|
||||
*,
|
||||
query_param: str,
|
||||
header_param: str,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
) -> _models.ActionResponse:
|
||||
"""basic_action.
|
||||
|
||||
:param body: Required.
|
||||
:type body: ~specs.azure.example.basic.models.ActionRequest
|
||||
:keyword query_param: Required.
|
||||
:paramtype query_param: str
|
||||
:keyword header_param: Required.
|
||||
:paramtype header_param: str
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for JSON body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
:return: ActionResponse. The ActionResponse is compatible with MutableMapping
|
||||
:rtype: ~specs.azure.example.basic.models.ActionResponse
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
body = {
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": [
|
||||
"str"
|
||||
],
|
||||
"modelProperty": {
|
||||
"enumProperty": "str",
|
||||
"float32Property": 0.0,
|
||||
"int32Property": 0
|
||||
},
|
||||
"recordProperty": {
|
||||
"str": "str"
|
||||
}
|
||||
}
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": [
|
||||
"str"
|
||||
],
|
||||
"modelProperty": {
|
||||
"enumProperty": "str",
|
||||
"float32Property": 0.0,
|
||||
"int32Property": 0
|
||||
},
|
||||
"recordProperty": {
|
||||
"str": "str"
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
@overload
|
||||
def basic_action(
|
||||
self, body: JSON, *, query_param: str, header_param: str, content_type: str = "application/json", **kwargs: Any
|
||||
) -> _models.ActionResponse:
|
||||
"""basic_action.
|
||||
|
||||
:param body: Required.
|
||||
:type body: JSON
|
||||
:keyword query_param: Required.
|
||||
:paramtype query_param: str
|
||||
:keyword header_param: Required.
|
||||
:paramtype header_param: str
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for JSON body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
:return: ActionResponse. The ActionResponse is compatible with MutableMapping
|
||||
:rtype: ~specs.azure.example.basic.models.ActionResponse
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": [
|
||||
"str"
|
||||
],
|
||||
"modelProperty": {
|
||||
"enumProperty": "str",
|
||||
"float32Property": 0.0,
|
||||
"int32Property": 0
|
||||
},
|
||||
"recordProperty": {
|
||||
"str": "str"
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
@overload
|
||||
def basic_action(
|
||||
self,
|
||||
body: IO[bytes],
|
||||
*,
|
||||
query_param: str,
|
||||
header_param: str,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
) -> _models.ActionResponse:
|
||||
"""basic_action.
|
||||
|
||||
:param body: Required.
|
||||
:type body: IO[bytes]
|
||||
:keyword query_param: Required.
|
||||
:paramtype query_param: str
|
||||
:keyword header_param: Required.
|
||||
:paramtype header_param: str
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for binary body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
:return: ActionResponse. The ActionResponse is compatible with MutableMapping
|
||||
:rtype: ~specs.azure.example.basic.models.ActionResponse
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": [
|
||||
"str"
|
||||
],
|
||||
"modelProperty": {
|
||||
"enumProperty": "str",
|
||||
"float32Property": 0.0,
|
||||
"int32Property": 0
|
||||
},
|
||||
"recordProperty": {
|
||||
"str": "str"
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
@distributed_trace
|
||||
def basic_action(
|
||||
self, body: Union[_models.ActionRequest, JSON, IO[bytes]], *, query_param: str, header_param: str, **kwargs: Any
|
||||
) -> _models.ActionResponse:
|
||||
"""basic_action.
|
||||
|
||||
:param body: Is one of the following types: ActionRequest, JSON, IO[bytes] Required.
|
||||
:type body: ~specs.azure.example.basic.models.ActionRequest or JSON or IO[bytes]
|
||||
:keyword query_param: Required.
|
||||
:paramtype query_param: str
|
||||
:keyword header_param: Required.
|
||||
:paramtype header_param: str
|
||||
:return: ActionResponse. The ActionResponse is compatible with MutableMapping
|
||||
:rtype: ~specs.azure.example.basic.models.ActionResponse
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
body = {
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": [
|
||||
"str"
|
||||
],
|
||||
"modelProperty": {
|
||||
"enumProperty": "str",
|
||||
"float32Property": 0.0,
|
||||
"int32Property": 0
|
||||
},
|
||||
"recordProperty": {
|
||||
"str": "str"
|
||||
}
|
||||
}
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": [
|
||||
"str"
|
||||
],
|
||||
"modelProperty": {
|
||||
"enumProperty": "str",
|
||||
"float32Property": 0.0,
|
||||
"int32Property": 0
|
||||
},
|
||||
"recordProperty": {
|
||||
"str": "str"
|
||||
}
|
||||
}
|
||||
"""
|
||||
error_map: MutableMapping[int, Type[HttpResponseError]] = {
|
||||
401: ClientAuthenticationError,
|
||||
404: ResourceNotFoundError,
|
||||
409: ResourceExistsError,
|
||||
304: ResourceNotModifiedError,
|
||||
}
|
||||
error_map.update(kwargs.pop("error_map", {}) or {})
|
||||
|
||||
_headers = case_insensitive_dict(kwargs.pop("headers", {}) or {})
|
||||
_params = kwargs.pop("params", {}) or {}
|
||||
|
||||
content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None))
|
||||
cls: ClsType[_models.ActionResponse] = kwargs.pop("cls", None)
|
||||
|
||||
content_type = content_type or "application/json"
|
||||
_content = None
|
||||
if isinstance(body, (IOBase, bytes)):
|
||||
_content = body
|
||||
else:
|
||||
_content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore
|
||||
|
||||
_request = build_azure_example_basic_action_request(
|
||||
query_param=query_param,
|
||||
header_param=header_param,
|
||||
content_type=content_type,
|
||||
api_version=self._config.api_version,
|
||||
content=_content,
|
||||
headers=_headers,
|
||||
params=_params,
|
||||
)
|
||||
_request.url = self._client.format_url(_request.url)
|
||||
|
||||
_stream = kwargs.pop("stream", False)
|
||||
pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access
|
||||
_request, stream=_stream, **kwargs
|
||||
)
|
||||
|
||||
response = pipeline_response.http_response
|
||||
|
||||
if response.status_code not in [200]:
|
||||
if _stream:
|
||||
try:
|
||||
response.read() # Load the body in memory and close the socket
|
||||
except (StreamConsumedError, StreamClosedError):
|
||||
pass
|
||||
map_error(status_code=response.status_code, response=response, error_map=error_map)
|
||||
raise HttpResponseError(response=response)
|
||||
|
||||
if _stream:
|
||||
deserialized = response.iter_bytes()
|
||||
else:
|
||||
deserialized = _deserialize(_models.ActionResponse, response.json())
|
||||
|
||||
if cls:
|
||||
return cls(pipeline_response, deserialized, {}) # type: ignore
|
||||
|
||||
return deserialized # type: ignore
|
|
@ -0,0 +1,20 @@
|
|||
# ------------------------------------
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
# ------------------------------------
|
||||
"""Customize generated code here.
|
||||
|
||||
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
||||
from typing import List
|
||||
|
||||
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
|
||||
|
||||
|
||||
def patch_sdk():
|
||||
"""Do not remove from this file.
|
||||
|
||||
`patch_sdk` is a last resort escape hatch that allows you to do customizations
|
||||
you can't accomplish using the techniques described in
|
||||
https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
|
@ -0,0 +1,20 @@
|
|||
# ------------------------------------
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
# ------------------------------------
|
||||
"""Customize generated code here.
|
||||
|
||||
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
||||
from typing import List
|
||||
|
||||
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
|
||||
|
||||
|
||||
def patch_sdk():
|
||||
"""Do not remove from this file.
|
||||
|
||||
`patch_sdk` is a last resort escape hatch that allows you to do customizations
|
||||
you can't accomplish using the techniques described in
|
||||
https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,26 @@
|
|||
# --------------------------------------------------------------------------
|
||||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from abc import ABC
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from ._configuration import AzureExampleClientConfiguration
|
||||
|
||||
if TYPE_CHECKING:
|
||||
# pylint: disable=unused-import,ungrouped-imports
|
||||
from azure.core import PipelineClient
|
||||
|
||||
from ._serialization import Deserializer, Serializer
|
||||
|
||||
|
||||
class AzureExampleClientMixinABC(ABC):
|
||||
"""DO NOT use this class. It is for internal typing use only."""
|
||||
|
||||
_client: "PipelineClient"
|
||||
_config: AzureExampleClientConfiguration
|
||||
_serialize: "Serializer"
|
||||
_deserialize: "Deserializer"
|
|
@ -0,0 +1,9 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
VERSION = "1.0.0b1"
|
|
@ -0,0 +1,23 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from ._client import AzureExampleClient
|
||||
|
||||
try:
|
||||
from ._patch import __all__ as _patch_all
|
||||
from ._patch import * # pylint: disable=unused-wildcard-import
|
||||
except ImportError:
|
||||
_patch_all = []
|
||||
from ._patch import patch_sdk as _patch_sdk
|
||||
|
||||
__all__ = [
|
||||
"AzureExampleClient",
|
||||
]
|
||||
__all__.extend([p for p in _patch_all if p not in __all__])
|
||||
|
||||
_patch_sdk()
|
|
@ -0,0 +1,92 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from copy import deepcopy
|
||||
from typing import Any, Awaitable
|
||||
from typing_extensions import Self
|
||||
|
||||
from azure.core import AsyncPipelineClient
|
||||
from azure.core.pipeline import policies
|
||||
from azure.core.rest import AsyncHttpResponse, HttpRequest
|
||||
|
||||
from .._serialization import Deserializer, Serializer
|
||||
from ._configuration import AzureExampleClientConfiguration
|
||||
from ._operations import AzureExampleClientOperationsMixin
|
||||
|
||||
|
||||
class AzureExampleClient(AzureExampleClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword
|
||||
"""AzureExampleClient.
|
||||
|
||||
:keyword endpoint: Service host. Default value is "http://localhost:3000".
|
||||
:paramtype endpoint: str
|
||||
:keyword api_version: The API version to use for this operation. Default value is
|
||||
"2022-12-01-preview". Note that overriding this default value may result in unsupported
|
||||
behavior.
|
||||
:paramtype api_version: str
|
||||
"""
|
||||
|
||||
def __init__( # pylint: disable=missing-client-constructor-parameter-credential
|
||||
self, *, endpoint: str = "http://localhost:3000", **kwargs: Any
|
||||
) -> None:
|
||||
self._config = AzureExampleClientConfiguration(**kwargs)
|
||||
_policies = kwargs.pop("policies", None)
|
||||
if _policies is None:
|
||||
_policies = [
|
||||
policies.RequestIdPolicy(**kwargs),
|
||||
self._config.headers_policy,
|
||||
self._config.user_agent_policy,
|
||||
self._config.proxy_policy,
|
||||
policies.ContentDecodePolicy(**kwargs),
|
||||
self._config.redirect_policy,
|
||||
self._config.retry_policy,
|
||||
self._config.authentication_policy,
|
||||
self._config.custom_hook_policy,
|
||||
self._config.logging_policy,
|
||||
policies.DistributedTracingPolicy(**kwargs),
|
||||
policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None,
|
||||
self._config.http_logging_policy,
|
||||
]
|
||||
self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=endpoint, policies=_policies, **kwargs)
|
||||
|
||||
self._serialize = Serializer()
|
||||
self._deserialize = Deserializer()
|
||||
self._serialize.client_side_validation = False
|
||||
|
||||
def send_request(
|
||||
self, request: HttpRequest, *, stream: bool = False, **kwargs: Any
|
||||
) -> Awaitable[AsyncHttpResponse]:
|
||||
"""Runs the network request through the client's chained policies.
|
||||
|
||||
>>> from azure.core.rest import HttpRequest
|
||||
>>> request = HttpRequest("GET", "https://www.example.org/")
|
||||
<HttpRequest [GET], url: 'https://www.example.org/'>
|
||||
>>> response = await client.send_request(request)
|
||||
<AsyncHttpResponse: 200 OK>
|
||||
|
||||
For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request
|
||||
|
||||
:param request: The network request you want to make. Required.
|
||||
:type request: ~azure.core.rest.HttpRequest
|
||||
:keyword bool stream: Whether the response payload will be streamed. Defaults to False.
|
||||
:return: The response of your network call. Does not do error handling on your response.
|
||||
:rtype: ~azure.core.rest.AsyncHttpResponse
|
||||
"""
|
||||
|
||||
request_copy = deepcopy(request)
|
||||
request_copy.url = self._client.format_url(request_copy.url)
|
||||
return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore
|
||||
|
||||
async def close(self) -> None:
|
||||
await self._client.close()
|
||||
|
||||
async def __aenter__(self) -> Self:
|
||||
await self._client.__aenter__()
|
||||
return self
|
||||
|
||||
async def __aexit__(self, *exc_details: Any) -> None:
|
||||
await self._client.__aexit__(*exc_details)
|
|
@ -0,0 +1,45 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from typing import Any
|
||||
|
||||
from azure.core.pipeline import policies
|
||||
|
||||
from .._version import VERSION
|
||||
|
||||
|
||||
class AzureExampleClientConfiguration: # pylint: disable=too-many-instance-attributes,name-too-long
|
||||
"""Configuration for AzureExampleClient.
|
||||
|
||||
Note that all parameters used to create this instance are saved as instance
|
||||
attributes.
|
||||
|
||||
:keyword api_version: The API version to use for this operation. Default value is
|
||||
"2022-12-01-preview". Note that overriding this default value may result in unsupported
|
||||
behavior.
|
||||
:paramtype api_version: str
|
||||
"""
|
||||
|
||||
def __init__(self, **kwargs: Any) -> None:
|
||||
api_version: str = kwargs.pop("api_version", "2022-12-01-preview")
|
||||
|
||||
self.api_version = api_version
|
||||
kwargs.setdefault("sdk_moniker", "specs-azure-example-basic/{}".format(VERSION))
|
||||
self.polling_interval = kwargs.get("polling_interval", 30)
|
||||
self._configure(**kwargs)
|
||||
|
||||
def _configure(self, **kwargs: Any) -> None:
|
||||
self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs)
|
||||
self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs)
|
||||
self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs)
|
||||
self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs)
|
||||
self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs)
|
||||
self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs)
|
||||
self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs)
|
||||
self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs)
|
||||
self.authentication_policy = kwargs.get("authentication_policy")
|
|
@ -0,0 +1,19 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from ._operations import AzureExampleClientOperationsMixin
|
||||
|
||||
from ._patch import __all__ as _patch_all
|
||||
from ._patch import * # pylint: disable=unused-wildcard-import
|
||||
from ._patch import patch_sdk as _patch_sdk
|
||||
|
||||
__all__ = [
|
||||
"AzureExampleClientOperationsMixin",
|
||||
]
|
||||
__all__.extend([p for p in _patch_all if p not in __all__])
|
||||
_patch_sdk()
|
|
@ -0,0 +1,297 @@
|
|||
# pylint: disable=too-many-lines,too-many-statements
|
||||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
from io import IOBase
|
||||
import json
|
||||
import sys
|
||||
from typing import Any, Callable, Dict, IO, Optional, Type, TypeVar, Union, overload
|
||||
|
||||
from azure.core.exceptions import (
|
||||
ClientAuthenticationError,
|
||||
HttpResponseError,
|
||||
ResourceExistsError,
|
||||
ResourceNotFoundError,
|
||||
ResourceNotModifiedError,
|
||||
StreamClosedError,
|
||||
StreamConsumedError,
|
||||
map_error,
|
||||
)
|
||||
from azure.core.pipeline import PipelineResponse
|
||||
from azure.core.rest import AsyncHttpResponse, HttpRequest
|
||||
from azure.core.tracing.decorator_async import distributed_trace_async
|
||||
from azure.core.utils import case_insensitive_dict
|
||||
|
||||
from ... import models as _models
|
||||
from ..._model_base import SdkJSONEncoder, _deserialize
|
||||
from ..._operations._operations import build_azure_example_basic_action_request
|
||||
from .._vendor import AzureExampleClientMixinABC
|
||||
|
||||
if sys.version_info >= (3, 9):
|
||||
from collections.abc import MutableMapping
|
||||
else:
|
||||
from typing import MutableMapping # type: ignore # pylint: disable=ungrouped-imports
|
||||
JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object
|
||||
T = TypeVar("T")
|
||||
ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]]
|
||||
|
||||
|
||||
class AzureExampleClientOperationsMixin(AzureExampleClientMixinABC):
|
||||
|
||||
@overload
|
||||
async def basic_action(
|
||||
self,
|
||||
body: _models.ActionRequest,
|
||||
*,
|
||||
query_param: str,
|
||||
header_param: str,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
) -> _models.ActionResponse:
|
||||
"""basic_action.
|
||||
|
||||
:param body: Required.
|
||||
:type body: ~specs.azure.example.basic.models.ActionRequest
|
||||
:keyword query_param: Required.
|
||||
:paramtype query_param: str
|
||||
:keyword header_param: Required.
|
||||
:paramtype header_param: str
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for JSON body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
:return: ActionResponse. The ActionResponse is compatible with MutableMapping
|
||||
:rtype: ~specs.azure.example.basic.models.ActionResponse
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
body = {
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": [
|
||||
"str"
|
||||
],
|
||||
"modelProperty": {
|
||||
"enumProperty": "str",
|
||||
"float32Property": 0.0,
|
||||
"int32Property": 0
|
||||
},
|
||||
"recordProperty": {
|
||||
"str": "str"
|
||||
}
|
||||
}
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": [
|
||||
"str"
|
||||
],
|
||||
"modelProperty": {
|
||||
"enumProperty": "str",
|
||||
"float32Property": 0.0,
|
||||
"int32Property": 0
|
||||
},
|
||||
"recordProperty": {
|
||||
"str": "str"
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
@overload
|
||||
async def basic_action(
|
||||
self, body: JSON, *, query_param: str, header_param: str, content_type: str = "application/json", **kwargs: Any
|
||||
) -> _models.ActionResponse:
|
||||
"""basic_action.
|
||||
|
||||
:param body: Required.
|
||||
:type body: JSON
|
||||
:keyword query_param: Required.
|
||||
:paramtype query_param: str
|
||||
:keyword header_param: Required.
|
||||
:paramtype header_param: str
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for JSON body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
:return: ActionResponse. The ActionResponse is compatible with MutableMapping
|
||||
:rtype: ~specs.azure.example.basic.models.ActionResponse
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": [
|
||||
"str"
|
||||
],
|
||||
"modelProperty": {
|
||||
"enumProperty": "str",
|
||||
"float32Property": 0.0,
|
||||
"int32Property": 0
|
||||
},
|
||||
"recordProperty": {
|
||||
"str": "str"
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
@overload
|
||||
async def basic_action(
|
||||
self,
|
||||
body: IO[bytes],
|
||||
*,
|
||||
query_param: str,
|
||||
header_param: str,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
) -> _models.ActionResponse:
|
||||
"""basic_action.
|
||||
|
||||
:param body: Required.
|
||||
:type body: IO[bytes]
|
||||
:keyword query_param: Required.
|
||||
:paramtype query_param: str
|
||||
:keyword header_param: Required.
|
||||
:paramtype header_param: str
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for binary body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
:return: ActionResponse. The ActionResponse is compatible with MutableMapping
|
||||
:rtype: ~specs.azure.example.basic.models.ActionResponse
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": [
|
||||
"str"
|
||||
],
|
||||
"modelProperty": {
|
||||
"enumProperty": "str",
|
||||
"float32Property": 0.0,
|
||||
"int32Property": 0
|
||||
},
|
||||
"recordProperty": {
|
||||
"str": "str"
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
@distributed_trace_async
|
||||
async def basic_action(
|
||||
self, body: Union[_models.ActionRequest, JSON, IO[bytes]], *, query_param: str, header_param: str, **kwargs: Any
|
||||
) -> _models.ActionResponse:
|
||||
"""basic_action.
|
||||
|
||||
:param body: Is one of the following types: ActionRequest, JSON, IO[bytes] Required.
|
||||
:type body: ~specs.azure.example.basic.models.ActionRequest or JSON or IO[bytes]
|
||||
:keyword query_param: Required.
|
||||
:paramtype query_param: str
|
||||
:keyword header_param: Required.
|
||||
:paramtype header_param: str
|
||||
:return: ActionResponse. The ActionResponse is compatible with MutableMapping
|
||||
:rtype: ~specs.azure.example.basic.models.ActionResponse
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
body = {
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": [
|
||||
"str"
|
||||
],
|
||||
"modelProperty": {
|
||||
"enumProperty": "str",
|
||||
"float32Property": 0.0,
|
||||
"int32Property": 0
|
||||
},
|
||||
"recordProperty": {
|
||||
"str": "str"
|
||||
}
|
||||
}
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"stringProperty": "str",
|
||||
"arrayProperty": [
|
||||
"str"
|
||||
],
|
||||
"modelProperty": {
|
||||
"enumProperty": "str",
|
||||
"float32Property": 0.0,
|
||||
"int32Property": 0
|
||||
},
|
||||
"recordProperty": {
|
||||
"str": "str"
|
||||
}
|
||||
}
|
||||
"""
|
||||
error_map: MutableMapping[int, Type[HttpResponseError]] = {
|
||||
401: ClientAuthenticationError,
|
||||
404: ResourceNotFoundError,
|
||||
409: ResourceExistsError,
|
||||
304: ResourceNotModifiedError,
|
||||
}
|
||||
error_map.update(kwargs.pop("error_map", {}) or {})
|
||||
|
||||
_headers = case_insensitive_dict(kwargs.pop("headers", {}) or {})
|
||||
_params = kwargs.pop("params", {}) or {}
|
||||
|
||||
content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None))
|
||||
cls: ClsType[_models.ActionResponse] = kwargs.pop("cls", None)
|
||||
|
||||
content_type = content_type or "application/json"
|
||||
_content = None
|
||||
if isinstance(body, (IOBase, bytes)):
|
||||
_content = body
|
||||
else:
|
||||
_content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore
|
||||
|
||||
_request = build_azure_example_basic_action_request(
|
||||
query_param=query_param,
|
||||
header_param=header_param,
|
||||
content_type=content_type,
|
||||
api_version=self._config.api_version,
|
||||
content=_content,
|
||||
headers=_headers,
|
||||
params=_params,
|
||||
)
|
||||
_request.url = self._client.format_url(_request.url)
|
||||
|
||||
_stream = kwargs.pop("stream", False)
|
||||
pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access
|
||||
_request, stream=_stream, **kwargs
|
||||
)
|
||||
|
||||
response = pipeline_response.http_response
|
||||
|
||||
if response.status_code not in [200]:
|
||||
if _stream:
|
||||
try:
|
||||
await response.read() # Load the body in memory and close the socket
|
||||
except (StreamConsumedError, StreamClosedError):
|
||||
pass
|
||||
map_error(status_code=response.status_code, response=response, error_map=error_map)
|
||||
raise HttpResponseError(response=response)
|
||||
|
||||
if _stream:
|
||||
deserialized = response.iter_bytes()
|
||||
else:
|
||||
deserialized = _deserialize(_models.ActionResponse, response.json())
|
||||
|
||||
if cls:
|
||||
return cls(pipeline_response, deserialized, {}) # type: ignore
|
||||
|
||||
return deserialized # type: ignore
|
|
@ -0,0 +1,20 @@
|
|||
# ------------------------------------
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
# ------------------------------------
|
||||
"""Customize generated code here.
|
||||
|
||||
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
||||
from typing import List
|
||||
|
||||
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
|
||||
|
||||
|
||||
def patch_sdk():
|
||||
"""Do not remove from this file.
|
||||
|
||||
`patch_sdk` is a last resort escape hatch that allows you to do customizations
|
||||
you can't accomplish using the techniques described in
|
||||
https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
|
@ -0,0 +1,20 @@
|
|||
# ------------------------------------
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
# ------------------------------------
|
||||
"""Customize generated code here.
|
||||
|
||||
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
||||
from typing import List
|
||||
|
||||
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
|
||||
|
||||
|
||||
def patch_sdk():
|
||||
"""Do not remove from this file.
|
||||
|
||||
`patch_sdk` is a last resort escape hatch that allows you to do customizations
|
||||
you can't accomplish using the techniques described in
|
||||
https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
|
@ -0,0 +1,26 @@
|
|||
# --------------------------------------------------------------------------
|
||||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from abc import ABC
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from ._configuration import AzureExampleClientConfiguration
|
||||
|
||||
if TYPE_CHECKING:
|
||||
# pylint: disable=unused-import,ungrouped-imports
|
||||
from azure.core import AsyncPipelineClient
|
||||
|
||||
from .._serialization import Deserializer, Serializer
|
||||
|
||||
|
||||
class AzureExampleClientMixinABC(ABC):
|
||||
"""DO NOT use this class. It is for internal typing use only."""
|
||||
|
||||
_client: "AsyncPipelineClient"
|
||||
_config: AzureExampleClientConfiguration
|
||||
_serialize: "Serializer"
|
||||
_deserialize: "Deserializer"
|
|
@ -0,0 +1,25 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from ._models import ActionRequest
|
||||
from ._models import ActionResponse
|
||||
from ._models import Model
|
||||
|
||||
from ._enums import EnumEnum
|
||||
from ._patch import __all__ as _patch_all
|
||||
from ._patch import * # pylint: disable=unused-wildcard-import
|
||||
from ._patch import patch_sdk as _patch_sdk
|
||||
|
||||
__all__ = [
|
||||
"ActionRequest",
|
||||
"ActionResponse",
|
||||
"Model",
|
||||
"EnumEnum",
|
||||
]
|
||||
__all__.extend([p for p in _patch_all if p not in __all__])
|
||||
_patch_sdk()
|
|
@ -0,0 +1,16 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from enum import Enum
|
||||
from azure.core import CaseInsensitiveEnumMeta
|
||||
|
||||
|
||||
class EnumEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta):
|
||||
"""Type of Enum."""
|
||||
|
||||
ENUM_VALUE1 = "EnumValue1"
|
|
@ -0,0 +1,137 @@
|
|||
# coding=utf-8
|
||||
# pylint: disable=too-many-lines
|
||||
# --------------------------------------------------------------------------
|
||||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from typing import Any, Dict, List, Mapping, Optional, TYPE_CHECKING, Union, overload
|
||||
|
||||
from .. import _model_base
|
||||
from .._model_base import rest_field
|
||||
|
||||
if TYPE_CHECKING:
|
||||
# pylint: disable=unused-import,ungrouped-imports
|
||||
from .. import models as _models
|
||||
|
||||
|
||||
class ActionRequest(_model_base.Model):
|
||||
"""ActionRequest.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar string_property: Required.
|
||||
:vartype string_property: str
|
||||
:ivar model_property:
|
||||
:vartype model_property: ~specs.azure.example.basic.models.Model
|
||||
:ivar array_property:
|
||||
:vartype array_property: list[str]
|
||||
:ivar record_property:
|
||||
:vartype record_property: dict[str, str]
|
||||
"""
|
||||
|
||||
string_property: str = rest_field(name="stringProperty")
|
||||
"""Required."""
|
||||
model_property: Optional["_models.Model"] = rest_field(name="modelProperty")
|
||||
array_property: Optional[List[str]] = rest_field(name="arrayProperty")
|
||||
record_property: Optional[Dict[str, str]] = rest_field(name="recordProperty")
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
string_property: str,
|
||||
model_property: Optional["_models.Model"] = None,
|
||||
array_property: Optional[List[str]] = None,
|
||||
record_property: Optional[Dict[str, str]] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class ActionResponse(_model_base.Model):
|
||||
"""ActionResponse.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar string_property: Required.
|
||||
:vartype string_property: str
|
||||
:ivar model_property:
|
||||
:vartype model_property: ~specs.azure.example.basic.models.Model
|
||||
:ivar array_property:
|
||||
:vartype array_property: list[str]
|
||||
:ivar record_property:
|
||||
:vartype record_property: dict[str, str]
|
||||
"""
|
||||
|
||||
string_property: str = rest_field(name="stringProperty")
|
||||
"""Required."""
|
||||
model_property: Optional["_models.Model"] = rest_field(name="modelProperty")
|
||||
array_property: Optional[List[str]] = rest_field(name="arrayProperty")
|
||||
record_property: Optional[Dict[str, str]] = rest_field(name="recordProperty")
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
string_property: str,
|
||||
model_property: Optional["_models.Model"] = None,
|
||||
array_property: Optional[List[str]] = None,
|
||||
record_property: Optional[Dict[str, str]] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class Model(_model_base.Model):
|
||||
"""Model.
|
||||
|
||||
:ivar int32_property:
|
||||
:vartype int32_property: int
|
||||
:ivar float32_property:
|
||||
:vartype float32_property: float
|
||||
:ivar enum_property: "EnumValue1"
|
||||
:vartype enum_property: str or ~specs.azure.example.basic.models.EnumEnum
|
||||
"""
|
||||
|
||||
int32_property: Optional[int] = rest_field(name="int32Property")
|
||||
float32_property: Optional[float] = rest_field(name="float32Property")
|
||||
enum_property: Optional[Union[str, "_models.EnumEnum"]] = rest_field(name="enumProperty")
|
||||
"""\"EnumValue1\""""
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
int32_property: Optional[int] = None,
|
||||
float32_property: Optional[float] = None,
|
||||
enum_property: Optional[Union[str, "_models.EnumEnum"]] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
|
@ -0,0 +1,20 @@
|
|||
# ------------------------------------
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
# ------------------------------------
|
||||
"""Customize generated code here.
|
||||
|
||||
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
||||
from typing import List
|
||||
|
||||
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
|
||||
|
||||
|
||||
def patch_sdk():
|
||||
"""Do not remove from this file.
|
||||
|
||||
`patch_sdk` is a last resort escape hatch that allows you to do customizations
|
||||
you can't accomplish using the techniques described in
|
||||
https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
|
@ -0,0 +1 @@
|
|||
# Marker file for PEP 561.
|
|
@ -345,6 +345,7 @@ class ClaimDevicesRequest(_model_base.Model):
|
|||
class CountElementsResponse(_model_base.Model):
|
||||
"""Response of the count for elements.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar value: Number of children resources in parent resource. Required.
|
||||
:vartype value: int
|
||||
|
@ -374,6 +375,7 @@ class CountElementsResponse(_model_base.Model):
|
|||
class CountDevicesResponse(CountElementsResponse):
|
||||
"""Response to the action call for count devices in a catalog.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar value: Number of children resources in parent resource. Required.
|
||||
:vartype value: int
|
||||
|
@ -734,6 +736,7 @@ class DeviceGroupUpdateProperties(_model_base.Model):
|
|||
class DeviceInsight(_model_base.Model):
|
||||
"""Device insight report.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar device_id: Device ID. Required.
|
||||
:vartype device_id: str
|
||||
|
@ -1201,7 +1204,7 @@ class Operation(_model_base.Model):
|
|||
is_data_action: Optional[bool] = rest_field(name="isDataAction", visibility=["read"])
|
||||
"""Whether the operation applies to data-plane. This is \"true\" for data-plane operations and
|
||||
\"false\" for Azure Resource Manager/control-plane operations."""
|
||||
display: Optional["_models.OperationDisplay"] = rest_field()
|
||||
display: Optional["_models.OperationDisplay"] = rest_field(visibility=["read"])
|
||||
"""Localized display information for this particular operation."""
|
||||
origin: Optional[Union[str, "_models.Origin"]] = rest_field(visibility=["read"])
|
||||
"""The intended executor of the operation; as in Resource Based Access Control (RBAC) and audit
|
||||
|
@ -1215,7 +1218,6 @@ class Operation(_model_base.Model):
|
|||
def __init__(
|
||||
self,
|
||||
*,
|
||||
display: Optional["_models.OperationDisplay"] = None,
|
||||
action_type: Optional[Union[str, "_models.ActionType"]] = None,
|
||||
): ...
|
||||
|
||||
|
@ -1233,6 +1235,8 @@ class Operation(_model_base.Model):
|
|||
class OperationDisplay(_model_base.Model):
|
||||
"""Localized display information for and operation.
|
||||
|
||||
Readonly variables are only populated by the server, and will be ignored when sending a request.
|
||||
|
||||
:ivar provider: The localized friendly form of the resource provider name, e.g. "Microsoft
|
||||
Monitoring Insights" or "Microsoft Compute".
|
||||
:vartype provider: str
|
||||
|
@ -1247,39 +1251,19 @@ class OperationDisplay(_model_base.Model):
|
|||
:vartype description: str
|
||||
"""
|
||||
|
||||
provider: Optional[str] = rest_field()
|
||||
provider: Optional[str] = rest_field(visibility=["read"])
|
||||
"""The localized friendly form of the resource provider name, e.g. \"Microsoft Monitoring
|
||||
Insights\" or \"Microsoft Compute\"."""
|
||||
resource: Optional[str] = rest_field()
|
||||
resource: Optional[str] = rest_field(visibility=["read"])
|
||||
"""The localized friendly name of the resource type related to this operation. E.g. \"Virtual
|
||||
Machines\" or \"Job Schedule Collections\"."""
|
||||
operation: Optional[str] = rest_field()
|
||||
operation: Optional[str] = rest_field(visibility=["read"])
|
||||
"""The concise, localized friendly name for the operation; suitable for dropdowns. E.g. \"Create
|
||||
or Update Virtual Machine\", \"Restart Virtual Machine\"."""
|
||||
description: Optional[str] = rest_field()
|
||||
description: Optional[str] = rest_field(visibility=["read"])
|
||||
"""The short, localized friendly description of the operation; suitable for tool tips and detailed
|
||||
views."""
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
provider: Optional[str] = None,
|
||||
resource: Optional[str] = None,
|
||||
operation: Optional[str] = None,
|
||||
description: Optional[str] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class Product(ProxyResource):
|
||||
"""An product resource belonging to a catalog resource.
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
# Release History
|
||||
|
||||
## 1.0.0b1 (1970-01-01)
|
||||
|
||||
- Initial version
|
|
@ -0,0 +1,21 @@
|
|||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
MIT License
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,9 @@
|
|||
include *.md
|
||||
include LICENSE
|
||||
include azure/resourcemanager/models/commontypes/managedidentity/py.typed
|
||||
recursive-include tests *.py
|
||||
recursive-include samples *.py *.md
|
||||
include azure/__init__.py
|
||||
include azure/resourcemanager/__init__.py
|
||||
include azure/resourcemanager/models/__init__.py
|
||||
include azure/resourcemanager/models/commontypes/__init__.py
|
|
@ -0,0 +1,80 @@
|
|||
|
||||
|
||||
# Azure Resourcemanager Models Commontypes Managedidentity client library for Python
|
||||
<!-- write necessary description of service -->
|
||||
|
||||
## Getting started
|
||||
|
||||
### Install the package
|
||||
|
||||
```bash
|
||||
python -m pip install azure-resourcemanager-models-commontypes-managedidentity
|
||||
```
|
||||
|
||||
#### Prequisites
|
||||
|
||||
- Python 3.8 or later is required to use this package.
|
||||
- You need an [Azure subscription][azure_sub] to use this package.
|
||||
- An existing Azure Resourcemanager Models Commontypes Managedidentity instance.
|
||||
#### Create with an Azure Active Directory Credential
|
||||
To use an [Azure Active Directory (AAD) token credential][authenticate_with_token],
|
||||
provide an instance of the desired credential type obtained from the
|
||||
[azure-identity][azure_identity_credentials] library.
|
||||
|
||||
To authenticate with AAD, you must first [pip][pip] install [`azure-identity`][azure_identity_pip]
|
||||
|
||||
After setup, you can choose which type of [credential][azure_identity_credentials] from azure.identity to use.
|
||||
As an example, [DefaultAzureCredential][default_azure_credential] can be used to authenticate the client:
|
||||
|
||||
Set the values of the client ID, tenant ID, and client secret of the AAD application as environment variables:
|
||||
`AZURE_CLIENT_ID`, `AZURE_TENANT_ID`, `AZURE_CLIENT_SECRET`
|
||||
|
||||
Use the returned token credential to authenticate the client:
|
||||
|
||||
```python
|
||||
>>> from azure.resourcemanager.models.commontypes.managedidentity import ManagedIdentityClient
|
||||
>>> from azure.identity import DefaultAzureCredential
|
||||
>>> client = ManagedIdentityClient(endpoint='<endpoint>', credential=DefaultAzureCredential())
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
```python
|
||||
>>> from azure.resourcemanager.models.commontypes.managedidentity import ManagedIdentityClient
|
||||
>>> from azure.identity import DefaultAzureCredential
|
||||
>>> from azure.core.exceptions import HttpResponseError
|
||||
|
||||
>>> client = ManagedIdentityClient(endpoint='<endpoint>', credential=DefaultAzureCredential())
|
||||
>>> try:
|
||||
<!-- write test code here -->
|
||||
except HttpResponseError as e:
|
||||
print('service responds error: {}'.format(e.response.json()))
|
||||
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
This project welcomes contributions and suggestions. Most contributions require
|
||||
you to agree to a Contributor License Agreement (CLA) declaring that you have
|
||||
the right to, and actually do, grant us the rights to use your contribution.
|
||||
For details, visit https://cla.microsoft.com.
|
||||
|
||||
When you submit a pull request, a CLA-bot will automatically determine whether
|
||||
you need to provide a CLA and decorate the PR appropriately (e.g., label,
|
||||
comment). Simply follow the instructions provided by the bot. You will only
|
||||
need to do this once across all repos using our CLA.
|
||||
|
||||
This project has adopted the
|
||||
[Microsoft Open Source Code of Conduct][code_of_conduct]. For more information,
|
||||
see the Code of Conduct FAQ or contact opencode@microsoft.com with any
|
||||
additional questions or comments.
|
||||
|
||||
<!-- LINKS -->
|
||||
[code_of_conduct]: https://opensource.microsoft.com/codeofconduct/
|
||||
[authenticate_with_token]: https://docs.microsoft.com/azure/cognitive-services/authentication?tabs=powershell#authenticate-with-an-authentication-token
|
||||
[azure_identity_credentials]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity#credentials
|
||||
[azure_identity_pip]: https://pypi.org/project/azure-identity/
|
||||
[default_azure_credential]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity#defaultazurecredential
|
||||
[pip]: https://pypi.org/project/pip/
|
||||
[azure_sub]: https://azure.microsoft.com/free/
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"CrossLanguagePackageId": "Azure.ResourceManager.Models.CommonTypes.ManagedIdentity",
|
||||
"CrossLanguageDefinitionId": {
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.models.ErrorAdditionalInfo": "Azure.ResourceManager.CommonTypes.ErrorAdditionalInfo",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.models.ErrorDetail": "Azure.ResourceManager.CommonTypes.ErrorDetail",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.models.ErrorResponse": "Azure.ResourceManager.CommonTypes.ErrorResponse",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.models.Resource": "Azure.ResourceManager.CommonTypes.Resource",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.models.TrackedResource": "Azure.ResourceManager.CommonTypes.TrackedResource",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource": "Azure.ResourceManager.Models.CommonTypes.ManagedIdentity.ManagedIdentityTrackedResource",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResourceProperties": "Azure.ResourceManager.Models.CommonTypes.ManagedIdentity.ManagedIdentityTrackedResourceProperties",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.models.ManagedServiceIdentity": "Azure.ResourceManager.CommonTypes.ManagedServiceIdentity",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.models.SystemData": "Azure.ResourceManager.CommonTypes.SystemData",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.models.UserAssignedIdentity": "Azure.ResourceManager.CommonTypes.UserAssignedIdentity",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.models.CreatedByType": "Azure.ResourceManager.CommonTypes.createdByType",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.models.ManagedServiceIdentityType": "Azure.ResourceManager.CommonTypes.ManagedServiceIdentityType",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.ManagedIdentityClient.managed_identity_tracked_resources.get": "Azure.ResourceManager.Models.CommonTypes.ManagedIdentity.ManagedIdentityTrackedResources.get",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.ManagedIdentityClient.managed_identity_tracked_resources.create_with_system_assigned": "Azure.ResourceManager.Models.CommonTypes.ManagedIdentity.ManagedIdentityTrackedResources.createWithSystemAssigned",
|
||||
"azure.resourcemanager.models.commontypes.managedidentity.ManagedIdentityClient.managed_identity_tracked_resources.update_with_user_assigned_and_system_assigned": "Azure.ResourceManager.Models.CommonTypes.ManagedIdentity.ManagedIdentityTrackedResources.updateWithUserAssignedAndSystemAssigned"
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
|
|
@ -0,0 +1 @@
|
|||
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
|
|
@ -0,0 +1 @@
|
|||
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
|
|
@ -0,0 +1 @@
|
|||
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
|
|
@ -0,0 +1,26 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from ._client import ManagedIdentityClient
|
||||
from ._version import VERSION
|
||||
|
||||
__version__ = VERSION
|
||||
|
||||
try:
|
||||
from ._patch import __all__ as _patch_all
|
||||
from ._patch import * # pylint: disable=unused-wildcard-import
|
||||
except ImportError:
|
||||
_patch_all = []
|
||||
from ._patch import patch_sdk as _patch_sdk
|
||||
|
||||
__all__ = [
|
||||
"ManagedIdentityClient",
|
||||
]
|
||||
__all__.extend([p for p in _patch_all if p not in __all__])
|
||||
|
||||
_patch_sdk()
|
|
@ -0,0 +1,112 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from copy import deepcopy
|
||||
from typing import Any, TYPE_CHECKING
|
||||
from typing_extensions import Self
|
||||
|
||||
from azure.core.pipeline import policies
|
||||
from azure.core.rest import HttpRequest, HttpResponse
|
||||
from azure.mgmt.core import ARMPipelineClient
|
||||
from azure.mgmt.core.policies import ARMAutoResourceProviderRegistrationPolicy
|
||||
|
||||
from ._configuration import ManagedIdentityClientConfiguration
|
||||
from ._serialization import Deserializer, Serializer
|
||||
from .operations import ManagedIdentityTrackedResourcesOperations
|
||||
|
||||
if TYPE_CHECKING:
|
||||
# pylint: disable=unused-import,ungrouped-imports
|
||||
from azure.core.credentials import TokenCredential
|
||||
|
||||
|
||||
class ManagedIdentityClient: # pylint: disable=client-accepts-api-version-keyword
|
||||
"""Arm Managed Identity Provider management API.
|
||||
|
||||
:ivar managed_identity_tracked_resources: ManagedIdentityTrackedResourcesOperations operations
|
||||
:vartype managed_identity_tracked_resources:
|
||||
azure.resourcemanager.models.commontypes.managedidentity.operations.ManagedIdentityTrackedResourcesOperations
|
||||
:param credential: Credential used to authenticate requests to the service. Required.
|
||||
:type credential: ~azure.core.credentials.TokenCredential
|
||||
:param subscription_id: The ID of the target subscription. The value must be an UUID. Required.
|
||||
:type subscription_id: str
|
||||
:param base_url: Service host. Default value is "https://management.azure.com".
|
||||
:type base_url: str
|
||||
:keyword api_version: The API version to use for this operation. Default value is
|
||||
"2023-12-01-preview". Note that overriding this default value may result in unsupported
|
||||
behavior.
|
||||
:paramtype api_version: str
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
credential: "TokenCredential",
|
||||
subscription_id: str,
|
||||
base_url: str = "https://management.azure.com",
|
||||
**kwargs: Any
|
||||
) -> None:
|
||||
self._config = ManagedIdentityClientConfiguration(
|
||||
credential=credential, subscription_id=subscription_id, **kwargs
|
||||
)
|
||||
_policies = kwargs.pop("policies", None)
|
||||
if _policies is None:
|
||||
_policies = [
|
||||
policies.RequestIdPolicy(**kwargs),
|
||||
self._config.headers_policy,
|
||||
self._config.user_agent_policy,
|
||||
self._config.proxy_policy,
|
||||
policies.ContentDecodePolicy(**kwargs),
|
||||
ARMAutoResourceProviderRegistrationPolicy(),
|
||||
self._config.redirect_policy,
|
||||
self._config.retry_policy,
|
||||
self._config.authentication_policy,
|
||||
self._config.custom_hook_policy,
|
||||
self._config.logging_policy,
|
||||
policies.DistributedTracingPolicy(**kwargs),
|
||||
policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None,
|
||||
self._config.http_logging_policy,
|
||||
]
|
||||
self._client: ARMPipelineClient = ARMPipelineClient(base_url=base_url, policies=_policies, **kwargs)
|
||||
|
||||
self._serialize = Serializer()
|
||||
self._deserialize = Deserializer()
|
||||
self._serialize.client_side_validation = False
|
||||
self.managed_identity_tracked_resources = ManagedIdentityTrackedResourcesOperations(
|
||||
self._client, self._config, self._serialize, self._deserialize
|
||||
)
|
||||
|
||||
def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse:
|
||||
"""Runs the network request through the client's chained policies.
|
||||
|
||||
>>> from azure.core.rest import HttpRequest
|
||||
>>> request = HttpRequest("GET", "https://www.example.org/")
|
||||
<HttpRequest [GET], url: 'https://www.example.org/'>
|
||||
>>> response = client.send_request(request)
|
||||
<HttpResponse: 200 OK>
|
||||
|
||||
For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request
|
||||
|
||||
:param request: The network request you want to make. Required.
|
||||
:type request: ~azure.core.rest.HttpRequest
|
||||
:keyword bool stream: Whether the response payload will be streamed. Defaults to False.
|
||||
:return: The response of your network call. Does not do error handling on your response.
|
||||
:rtype: ~azure.core.rest.HttpResponse
|
||||
"""
|
||||
|
||||
request_copy = deepcopy(request)
|
||||
request_copy.url = self._client.format_url(request_copy.url)
|
||||
return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore
|
||||
|
||||
def close(self) -> None:
|
||||
self._client.close()
|
||||
|
||||
def __enter__(self) -> Self:
|
||||
self._client.__enter__()
|
||||
return self
|
||||
|
||||
def __exit__(self, *exc_details: Any) -> None:
|
||||
self._client.__exit__(*exc_details)
|
|
@ -0,0 +1,66 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from typing import Any, TYPE_CHECKING
|
||||
|
||||
from azure.core.pipeline import policies
|
||||
from azure.mgmt.core.policies import ARMChallengeAuthenticationPolicy, ARMHttpLoggingPolicy
|
||||
|
||||
from ._version import VERSION
|
||||
|
||||
if TYPE_CHECKING:
|
||||
# pylint: disable=unused-import,ungrouped-imports
|
||||
from azure.core.credentials import TokenCredential
|
||||
|
||||
|
||||
class ManagedIdentityClientConfiguration: # pylint: disable=too-many-instance-attributes,name-too-long
|
||||
"""Configuration for ManagedIdentityClient.
|
||||
|
||||
Note that all parameters used to create this instance are saved as instance
|
||||
attributes.
|
||||
|
||||
:param credential: Credential used to authenticate requests to the service. Required.
|
||||
:type credential: ~azure.core.credentials.TokenCredential
|
||||
:param subscription_id: The ID of the target subscription. The value must be an UUID. Required.
|
||||
:type subscription_id: str
|
||||
:keyword api_version: The API version to use for this operation. Default value is
|
||||
"2023-12-01-preview". Note that overriding this default value may result in unsupported
|
||||
behavior.
|
||||
:paramtype api_version: str
|
||||
"""
|
||||
|
||||
def __init__(self, credential: "TokenCredential", subscription_id: str, **kwargs: Any) -> None:
|
||||
api_version: str = kwargs.pop("api_version", "2023-12-01-preview")
|
||||
|
||||
if credential is None:
|
||||
raise ValueError("Parameter 'credential' must not be None.")
|
||||
if subscription_id is None:
|
||||
raise ValueError("Parameter 'subscription_id' must not be None.")
|
||||
|
||||
self.credential = credential
|
||||
self.subscription_id = subscription_id
|
||||
self.api_version = api_version
|
||||
self.credential_scopes = kwargs.pop("credential_scopes", ["https://management.azure.com/.default"])
|
||||
kwargs.setdefault("sdk_moniker", "resourcemanager-models-commontypes-managedidentity/{}".format(VERSION))
|
||||
self.polling_interval = kwargs.get("polling_interval", 30)
|
||||
self._configure(**kwargs)
|
||||
|
||||
def _configure(self, **kwargs: Any) -> None:
|
||||
self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs)
|
||||
self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs)
|
||||
self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs)
|
||||
self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs)
|
||||
self.http_logging_policy = kwargs.get("http_logging_policy") or ARMHttpLoggingPolicy(**kwargs)
|
||||
self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs)
|
||||
self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs)
|
||||
self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs)
|
||||
self.authentication_policy = kwargs.get("authentication_policy")
|
||||
if self.credential and not self.authentication_policy:
|
||||
self.authentication_policy = ARMChallengeAuthenticationPolicy(
|
||||
self.credential, *self.credential_scopes, **kwargs
|
||||
)
|
|
@ -0,0 +1,888 @@
|
|||
# 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.
|
||||
# --------------------------------------------------------------------------
|
||||
# pylint: disable=protected-access, arguments-differ, signature-differs, broad-except
|
||||
|
||||
import copy
|
||||
import calendar
|
||||
import decimal
|
||||
import functools
|
||||
import sys
|
||||
import logging
|
||||
import base64
|
||||
import re
|
||||
import typing
|
||||
import enum
|
||||
import email.utils
|
||||
from datetime import datetime, date, time, timedelta, timezone
|
||||
from json import JSONEncoder
|
||||
from typing_extensions import Self
|
||||
import isodate
|
||||
from azure.core.exceptions import DeserializationError
|
||||
from azure.core import CaseInsensitiveEnumMeta
|
||||
from azure.core.pipeline import PipelineResponse
|
||||
from azure.core.serialization import _Null
|
||||
|
||||
if sys.version_info >= (3, 9):
|
||||
from collections.abc import MutableMapping
|
||||
else:
|
||||
from typing import MutableMapping
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
__all__ = ["SdkJSONEncoder", "Model", "rest_field", "rest_discriminator"]
|
||||
|
||||
TZ_UTC = timezone.utc
|
||||
_T = typing.TypeVar("_T")
|
||||
|
||||
|
||||
def _timedelta_as_isostr(td: timedelta) -> str:
|
||||
"""Converts a datetime.timedelta object into an ISO 8601 formatted string, e.g. 'P4DT12H30M05S'
|
||||
|
||||
Function adapted from the Tin Can Python project: https://github.com/RusticiSoftware/TinCanPython
|
||||
|
||||
:param timedelta td: The timedelta to convert
|
||||
:rtype: str
|
||||
:return: ISO8601 version of this timedelta
|
||||
"""
|
||||
|
||||
# Split seconds to larger units
|
||||
seconds = td.total_seconds()
|
||||
minutes, seconds = divmod(seconds, 60)
|
||||
hours, minutes = divmod(minutes, 60)
|
||||
days, hours = divmod(hours, 24)
|
||||
|
||||
days, hours, minutes = list(map(int, (days, hours, minutes)))
|
||||
seconds = round(seconds, 6)
|
||||
|
||||
# Build date
|
||||
date_str = ""
|
||||
if days:
|
||||
date_str = "%sD" % days
|
||||
|
||||
if hours or minutes or seconds:
|
||||
# Build time
|
||||
time_str = "T"
|
||||
|
||||
# Hours
|
||||
bigger_exists = date_str or hours
|
||||
if bigger_exists:
|
||||
time_str += "{:02}H".format(hours)
|
||||
|
||||
# Minutes
|
||||
bigger_exists = bigger_exists or minutes
|
||||
if bigger_exists:
|
||||
time_str += "{:02}M".format(minutes)
|
||||
|
||||
# Seconds
|
||||
try:
|
||||
if seconds.is_integer():
|
||||
seconds_string = "{:02}".format(int(seconds))
|
||||
else:
|
||||
# 9 chars long w/ leading 0, 6 digits after decimal
|
||||
seconds_string = "%09.6f" % seconds
|
||||
# Remove trailing zeros
|
||||
seconds_string = seconds_string.rstrip("0")
|
||||
except AttributeError: # int.is_integer() raises
|
||||
seconds_string = "{:02}".format(seconds)
|
||||
|
||||
time_str += "{}S".format(seconds_string)
|
||||
else:
|
||||
time_str = ""
|
||||
|
||||
return "P" + date_str + time_str
|
||||
|
||||
|
||||
def _serialize_bytes(o, format: typing.Optional[str] = None) -> str:
|
||||
encoded = base64.b64encode(o).decode()
|
||||
if format == "base64url":
|
||||
return encoded.strip("=").replace("+", "-").replace("/", "_")
|
||||
return encoded
|
||||
|
||||
|
||||
def _serialize_datetime(o, format: typing.Optional[str] = None):
|
||||
if hasattr(o, "year") and hasattr(o, "hour"):
|
||||
if format == "rfc7231":
|
||||
return email.utils.format_datetime(o, usegmt=True)
|
||||
if format == "unix-timestamp":
|
||||
return int(calendar.timegm(o.utctimetuple()))
|
||||
|
||||
# astimezone() fails for naive times in Python 2.7, so make make sure o is aware (tzinfo is set)
|
||||
if not o.tzinfo:
|
||||
iso_formatted = o.replace(tzinfo=TZ_UTC).isoformat()
|
||||
else:
|
||||
iso_formatted = o.astimezone(TZ_UTC).isoformat()
|
||||
# Replace the trailing "+00:00" UTC offset with "Z" (RFC 3339: https://www.ietf.org/rfc/rfc3339.txt)
|
||||
return iso_formatted.replace("+00:00", "Z")
|
||||
# Next try datetime.date or datetime.time
|
||||
return o.isoformat()
|
||||
|
||||
|
||||
def _is_readonly(p):
|
||||
try:
|
||||
return p._visibility == ["read"] # pylint: disable=protected-access
|
||||
except AttributeError:
|
||||
return False
|
||||
|
||||
|
||||
class SdkJSONEncoder(JSONEncoder):
|
||||
"""A JSON encoder that's capable of serializing datetime objects and bytes."""
|
||||
|
||||
def __init__(self, *args, exclude_readonly: bool = False, format: typing.Optional[str] = None, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.exclude_readonly = exclude_readonly
|
||||
self.format = format
|
||||
|
||||
def default(self, o): # pylint: disable=too-many-return-statements
|
||||
if _is_model(o):
|
||||
if self.exclude_readonly:
|
||||
readonly_props = [p._rest_name for p in o._attr_to_rest_field.values() if _is_readonly(p)]
|
||||
return {k: v for k, v in o.items() if k not in readonly_props}
|
||||
return dict(o.items())
|
||||
try:
|
||||
return super(SdkJSONEncoder, self).default(o)
|
||||
except TypeError:
|
||||
if isinstance(o, _Null):
|
||||
return None
|
||||
if isinstance(o, decimal.Decimal):
|
||||
return float(o)
|
||||
if isinstance(o, (bytes, bytearray)):
|
||||
return _serialize_bytes(o, self.format)
|
||||
try:
|
||||
# First try datetime.datetime
|
||||
return _serialize_datetime(o, self.format)
|
||||
except AttributeError:
|
||||
pass
|
||||
# Last, try datetime.timedelta
|
||||
try:
|
||||
return _timedelta_as_isostr(o)
|
||||
except AttributeError:
|
||||
# This will be raised when it hits value.total_seconds in the method above
|
||||
pass
|
||||
return super(SdkJSONEncoder, self).default(o)
|
||||
|
||||
|
||||
_VALID_DATE = re.compile(r"\d{4}[-]\d{2}[-]\d{2}T\d{2}:\d{2}:\d{2}" + r"\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?")
|
||||
_VALID_RFC7231 = re.compile(
|
||||
r"(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{2}\s"
|
||||
r"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT"
|
||||
)
|
||||
|
||||
|
||||
def _deserialize_datetime(attr: typing.Union[str, datetime]) -> datetime:
|
||||
"""Deserialize ISO-8601 formatted string into Datetime object.
|
||||
|
||||
:param str attr: response string to be deserialized.
|
||||
:rtype: ~datetime.datetime
|
||||
:returns: The datetime object from that input
|
||||
"""
|
||||
if isinstance(attr, datetime):
|
||||
# i'm already deserialized
|
||||
return attr
|
||||
attr = attr.upper()
|
||||
match = _VALID_DATE.match(attr)
|
||||
if not match:
|
||||
raise ValueError("Invalid datetime string: " + attr)
|
||||
|
||||
check_decimal = attr.split(".")
|
||||
if len(check_decimal) > 1:
|
||||
decimal_str = ""
|
||||
for digit in check_decimal[1]:
|
||||
if digit.isdigit():
|
||||
decimal_str += digit
|
||||
else:
|
||||
break
|
||||
if len(decimal_str) > 6:
|
||||
attr = attr.replace(decimal_str, decimal_str[0:6])
|
||||
|
||||
date_obj = isodate.parse_datetime(attr)
|
||||
test_utc = date_obj.utctimetuple()
|
||||
if test_utc.tm_year > 9999 or test_utc.tm_year < 1:
|
||||
raise OverflowError("Hit max or min date")
|
||||
return date_obj
|
||||
|
||||
|
||||
def _deserialize_datetime_rfc7231(attr: typing.Union[str, datetime]) -> datetime:
|
||||
"""Deserialize RFC7231 formatted string into Datetime object.
|
||||
|
||||
:param str attr: response string to be deserialized.
|
||||
:rtype: ~datetime.datetime
|
||||
:returns: The datetime object from that input
|
||||
"""
|
||||
if isinstance(attr, datetime):
|
||||
# i'm already deserialized
|
||||
return attr
|
||||
match = _VALID_RFC7231.match(attr)
|
||||
if not match:
|
||||
raise ValueError("Invalid datetime string: " + attr)
|
||||
|
||||
return email.utils.parsedate_to_datetime(attr)
|
||||
|
||||
|
||||
def _deserialize_datetime_unix_timestamp(attr: typing.Union[float, datetime]) -> datetime:
|
||||
"""Deserialize unix timestamp into Datetime object.
|
||||
|
||||
:param str attr: response string to be deserialized.
|
||||
:rtype: ~datetime.datetime
|
||||
:returns: The datetime object from that input
|
||||
"""
|
||||
if isinstance(attr, datetime):
|
||||
# i'm already deserialized
|
||||
return attr
|
||||
return datetime.fromtimestamp(attr, TZ_UTC)
|
||||
|
||||
|
||||
def _deserialize_date(attr: typing.Union[str, date]) -> date:
|
||||
"""Deserialize ISO-8601 formatted string into Date object.
|
||||
:param str attr: response string to be deserialized.
|
||||
:rtype: date
|
||||
:returns: The date object from that input
|
||||
"""
|
||||
# This must NOT use defaultmonth/defaultday. Using None ensure this raises an exception.
|
||||
if isinstance(attr, date):
|
||||
return attr
|
||||
return isodate.parse_date(attr, defaultmonth=None, defaultday=None) # type: ignore
|
||||
|
||||
|
||||
def _deserialize_time(attr: typing.Union[str, time]) -> time:
|
||||
"""Deserialize ISO-8601 formatted string into time object.
|
||||
|
||||
:param str attr: response string to be deserialized.
|
||||
:rtype: datetime.time
|
||||
:returns: The time object from that input
|
||||
"""
|
||||
if isinstance(attr, time):
|
||||
return attr
|
||||
return isodate.parse_time(attr)
|
||||
|
||||
|
||||
def _deserialize_bytes(attr):
|
||||
if isinstance(attr, (bytes, bytearray)):
|
||||
return attr
|
||||
return bytes(base64.b64decode(attr))
|
||||
|
||||
|
||||
def _deserialize_bytes_base64(attr):
|
||||
if isinstance(attr, (bytes, bytearray)):
|
||||
return attr
|
||||
padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore
|
||||
attr = attr + padding # type: ignore
|
||||
encoded = attr.replace("-", "+").replace("_", "/")
|
||||
return bytes(base64.b64decode(encoded))
|
||||
|
||||
|
||||
def _deserialize_duration(attr):
|
||||
if isinstance(attr, timedelta):
|
||||
return attr
|
||||
return isodate.parse_duration(attr)
|
||||
|
||||
|
||||
def _deserialize_decimal(attr):
|
||||
if isinstance(attr, decimal.Decimal):
|
||||
return attr
|
||||
return decimal.Decimal(str(attr))
|
||||
|
||||
|
||||
_DESERIALIZE_MAPPING = {
|
||||
datetime: _deserialize_datetime,
|
||||
date: _deserialize_date,
|
||||
time: _deserialize_time,
|
||||
bytes: _deserialize_bytes,
|
||||
bytearray: _deserialize_bytes,
|
||||
timedelta: _deserialize_duration,
|
||||
typing.Any: lambda x: x,
|
||||
decimal.Decimal: _deserialize_decimal,
|
||||
}
|
||||
|
||||
_DESERIALIZE_MAPPING_WITHFORMAT = {
|
||||
"rfc3339": _deserialize_datetime,
|
||||
"rfc7231": _deserialize_datetime_rfc7231,
|
||||
"unix-timestamp": _deserialize_datetime_unix_timestamp,
|
||||
"base64": _deserialize_bytes,
|
||||
"base64url": _deserialize_bytes_base64,
|
||||
}
|
||||
|
||||
|
||||
def get_deserializer(annotation: typing.Any, rf: typing.Optional["_RestField"] = None):
|
||||
if rf and rf._format:
|
||||
return _DESERIALIZE_MAPPING_WITHFORMAT.get(rf._format)
|
||||
return _DESERIALIZE_MAPPING.get(annotation)
|
||||
|
||||
|
||||
def _get_type_alias_type(module_name: str, alias_name: str):
|
||||
types = {
|
||||
k: v
|
||||
for k, v in sys.modules[module_name].__dict__.items()
|
||||
if isinstance(v, typing._GenericAlias) # type: ignore
|
||||
}
|
||||
if alias_name not in types:
|
||||
return alias_name
|
||||
return types[alias_name]
|
||||
|
||||
|
||||
def _get_model(module_name: str, model_name: str):
|
||||
models = {k: v for k, v in sys.modules[module_name].__dict__.items() if isinstance(v, type)}
|
||||
module_end = module_name.rsplit(".", 1)[0]
|
||||
models.update({k: v for k, v in sys.modules[module_end].__dict__.items() if isinstance(v, type)})
|
||||
if isinstance(model_name, str):
|
||||
model_name = model_name.split(".")[-1]
|
||||
if model_name not in models:
|
||||
return model_name
|
||||
return models[model_name]
|
||||
|
||||
|
||||
_UNSET = object()
|
||||
|
||||
|
||||
class _MyMutableMapping(MutableMapping[str, typing.Any]): # pylint: disable=unsubscriptable-object
|
||||
def __init__(self, data: typing.Dict[str, typing.Any]) -> None:
|
||||
self._data = data
|
||||
|
||||
def __contains__(self, key: typing.Any) -> bool:
|
||||
return key in self._data
|
||||
|
||||
def __getitem__(self, key: str) -> typing.Any:
|
||||
return self._data.__getitem__(key)
|
||||
|
||||
def __setitem__(self, key: str, value: typing.Any) -> None:
|
||||
self._data.__setitem__(key, value)
|
||||
|
||||
def __delitem__(self, key: str) -> None:
|
||||
self._data.__delitem__(key)
|
||||
|
||||
def __iter__(self) -> typing.Iterator[typing.Any]:
|
||||
return self._data.__iter__()
|
||||
|
||||
def __len__(self) -> int:
|
||||
return self._data.__len__()
|
||||
|
||||
def __ne__(self, other: typing.Any) -> bool:
|
||||
return not self.__eq__(other)
|
||||
|
||||
def keys(self) -> typing.KeysView[str]:
|
||||
return self._data.keys()
|
||||
|
||||
def values(self) -> typing.ValuesView[typing.Any]:
|
||||
return self._data.values()
|
||||
|
||||
def items(self) -> typing.ItemsView[str, typing.Any]:
|
||||
return self._data.items()
|
||||
|
||||
def get(self, key: str, default: typing.Any = None) -> typing.Any:
|
||||
try:
|
||||
return self[key]
|
||||
except KeyError:
|
||||
return default
|
||||
|
||||
@typing.overload
|
||||
def pop(self, key: str) -> typing.Any: ...
|
||||
|
||||
@typing.overload
|
||||
def pop(self, key: str, default: _T) -> _T: ...
|
||||
|
||||
@typing.overload
|
||||
def pop(self, key: str, default: typing.Any) -> typing.Any: ...
|
||||
|
||||
def pop(self, key: str, default: typing.Any = _UNSET) -> typing.Any:
|
||||
if default is _UNSET:
|
||||
return self._data.pop(key)
|
||||
return self._data.pop(key, default)
|
||||
|
||||
def popitem(self) -> typing.Tuple[str, typing.Any]:
|
||||
return self._data.popitem()
|
||||
|
||||
def clear(self) -> None:
|
||||
self._data.clear()
|
||||
|
||||
def update(self, *args: typing.Any, **kwargs: typing.Any) -> None:
|
||||
self._data.update(*args, **kwargs)
|
||||
|
||||
@typing.overload
|
||||
def setdefault(self, key: str, default: None = None) -> None: ...
|
||||
|
||||
@typing.overload
|
||||
def setdefault(self, key: str, default: typing.Any) -> typing.Any: ...
|
||||
|
||||
def setdefault(self, key: str, default: typing.Any = _UNSET) -> typing.Any:
|
||||
if default is _UNSET:
|
||||
return self._data.setdefault(key)
|
||||
return self._data.setdefault(key, default)
|
||||
|
||||
def __eq__(self, other: typing.Any) -> bool:
|
||||
try:
|
||||
other_model = self.__class__(other)
|
||||
except Exception:
|
||||
return False
|
||||
return self._data == other_model._data
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return str(self._data)
|
||||
|
||||
|
||||
def _is_model(obj: typing.Any) -> bool:
|
||||
return getattr(obj, "_is_model", False)
|
||||
|
||||
|
||||
def _serialize(o, format: typing.Optional[str] = None): # pylint: disable=too-many-return-statements
|
||||
if isinstance(o, list):
|
||||
return [_serialize(x, format) for x in o]
|
||||
if isinstance(o, dict):
|
||||
return {k: _serialize(v, format) for k, v in o.items()}
|
||||
if isinstance(o, set):
|
||||
return {_serialize(x, format) for x in o}
|
||||
if isinstance(o, tuple):
|
||||
return tuple(_serialize(x, format) for x in o)
|
||||
if isinstance(o, (bytes, bytearray)):
|
||||
return _serialize_bytes(o, format)
|
||||
if isinstance(o, decimal.Decimal):
|
||||
return float(o)
|
||||
if isinstance(o, enum.Enum):
|
||||
return o.value
|
||||
try:
|
||||
# First try datetime.datetime
|
||||
return _serialize_datetime(o, format)
|
||||
except AttributeError:
|
||||
pass
|
||||
# Last, try datetime.timedelta
|
||||
try:
|
||||
return _timedelta_as_isostr(o)
|
||||
except AttributeError:
|
||||
# This will be raised when it hits value.total_seconds in the method above
|
||||
pass
|
||||
return o
|
||||
|
||||
|
||||
def _get_rest_field(
|
||||
attr_to_rest_field: typing.Dict[str, "_RestField"], rest_name: str
|
||||
) -> typing.Optional["_RestField"]:
|
||||
try:
|
||||
return next(rf for rf in attr_to_rest_field.values() if rf._rest_name == rest_name)
|
||||
except StopIteration:
|
||||
return None
|
||||
|
||||
|
||||
def _create_value(rf: typing.Optional["_RestField"], value: typing.Any) -> typing.Any:
|
||||
if not rf:
|
||||
return _serialize(value, None)
|
||||
if rf._is_multipart_file_input:
|
||||
return value
|
||||
if rf._is_model:
|
||||
return _deserialize(rf._type, value)
|
||||
return _serialize(value, rf._format)
|
||||
|
||||
|
||||
class Model(_MyMutableMapping):
|
||||
_is_model = True
|
||||
|
||||
def __init__(self, *args: typing.Any, **kwargs: typing.Any) -> None:
|
||||
class_name = self.__class__.__name__
|
||||
if len(args) > 1:
|
||||
raise TypeError(f"{class_name}.__init__() takes 2 positional arguments but {len(args) + 1} were given")
|
||||
dict_to_pass = {
|
||||
rest_field._rest_name: rest_field._default
|
||||
for rest_field in self._attr_to_rest_field.values()
|
||||
if rest_field._default is not _UNSET
|
||||
}
|
||||
if args:
|
||||
dict_to_pass.update(
|
||||
{k: _create_value(_get_rest_field(self._attr_to_rest_field, k), v) for k, v in args[0].items()}
|
||||
)
|
||||
else:
|
||||
non_attr_kwargs = [k for k in kwargs if k not in self._attr_to_rest_field]
|
||||
if non_attr_kwargs:
|
||||
# actual type errors only throw the first wrong keyword arg they see, so following that.
|
||||
raise TypeError(f"{class_name}.__init__() got an unexpected keyword argument '{non_attr_kwargs[0]}'")
|
||||
dict_to_pass.update(
|
||||
{
|
||||
self._attr_to_rest_field[k]._rest_name: _create_value(self._attr_to_rest_field[k], v)
|
||||
for k, v in kwargs.items()
|
||||
if v is not None
|
||||
}
|
||||
)
|
||||
super().__init__(dict_to_pass)
|
||||
|
||||
def copy(self) -> "Model":
|
||||
return Model(self.__dict__)
|
||||
|
||||
def __new__(cls, *args: typing.Any, **kwargs: typing.Any) -> Self: # pylint: disable=unused-argument
|
||||
# we know the last three classes in mro are going to be 'Model', 'dict', and 'object'
|
||||
mros = cls.__mro__[:-3][::-1] # ignore model, dict, and object parents, and reverse the mro order
|
||||
attr_to_rest_field: typing.Dict[str, _RestField] = { # map attribute name to rest_field property
|
||||
k: v for mro_class in mros for k, v in mro_class.__dict__.items() if k[0] != "_" and hasattr(v, "_type")
|
||||
}
|
||||
annotations = {
|
||||
k: v
|
||||
for mro_class in mros
|
||||
if hasattr(mro_class, "__annotations__") # pylint: disable=no-member
|
||||
for k, v in mro_class.__annotations__.items() # pylint: disable=no-member
|
||||
}
|
||||
for attr, rf in attr_to_rest_field.items():
|
||||
rf._module = cls.__module__
|
||||
if not rf._type:
|
||||
rf._type = rf._get_deserialize_callable_from_annotation(annotations.get(attr, None))
|
||||
if not rf._rest_name_input:
|
||||
rf._rest_name_input = attr
|
||||
cls._attr_to_rest_field: typing.Dict[str, _RestField] = dict(attr_to_rest_field.items())
|
||||
|
||||
return super().__new__(cls) # pylint: disable=no-value-for-parameter
|
||||
|
||||
def __init_subclass__(cls, discriminator: typing.Optional[str] = None) -> None:
|
||||
for base in cls.__bases__:
|
||||
if hasattr(base, "__mapping__"): # pylint: disable=no-member
|
||||
base.__mapping__[discriminator or cls.__name__] = cls # type: ignore # pylint: disable=no-member
|
||||
|
||||
@classmethod
|
||||
def _get_discriminator(cls, exist_discriminators) -> typing.Optional[str]:
|
||||
for v in cls.__dict__.values():
|
||||
if (
|
||||
isinstance(v, _RestField) and v._is_discriminator and v._rest_name not in exist_discriminators
|
||||
): # pylint: disable=protected-access
|
||||
return v._rest_name # pylint: disable=protected-access
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def _deserialize(cls, data, exist_discriminators):
|
||||
if not hasattr(cls, "__mapping__"): # pylint: disable=no-member
|
||||
return cls(data)
|
||||
discriminator = cls._get_discriminator(exist_discriminators)
|
||||
exist_discriminators.append(discriminator)
|
||||
mapped_cls = cls.__mapping__.get(data.get(discriminator), cls) # pyright: ignore # pylint: disable=no-member
|
||||
if mapped_cls == cls:
|
||||
return cls(data)
|
||||
return mapped_cls._deserialize(data, exist_discriminators) # pylint: disable=protected-access
|
||||
|
||||
def as_dict(self, *, exclude_readonly: bool = False) -> typing.Dict[str, typing.Any]:
|
||||
"""Return a dict that can be JSONify using json.dump.
|
||||
|
||||
:keyword bool exclude_readonly: Whether to remove the readonly properties.
|
||||
:returns: A dict JSON compatible object
|
||||
:rtype: dict
|
||||
"""
|
||||
|
||||
result = {}
|
||||
if exclude_readonly:
|
||||
readonly_props = [p._rest_name for p in self._attr_to_rest_field.values() if _is_readonly(p)]
|
||||
for k, v in self.items():
|
||||
if exclude_readonly and k in readonly_props: # pyright: ignore
|
||||
continue
|
||||
is_multipart_file_input = False
|
||||
try:
|
||||
is_multipart_file_input = next(
|
||||
rf for rf in self._attr_to_rest_field.values() if rf._rest_name == k
|
||||
)._is_multipart_file_input
|
||||
except StopIteration:
|
||||
pass
|
||||
result[k] = v if is_multipart_file_input else Model._as_dict_value(v, exclude_readonly=exclude_readonly)
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def _as_dict_value(v: typing.Any, exclude_readonly: bool = False) -> typing.Any:
|
||||
if v is None or isinstance(v, _Null):
|
||||
return None
|
||||
if isinstance(v, (list, tuple, set)):
|
||||
return type(v)(Model._as_dict_value(x, exclude_readonly=exclude_readonly) for x in v)
|
||||
if isinstance(v, dict):
|
||||
return {dk: Model._as_dict_value(dv, exclude_readonly=exclude_readonly) for dk, dv in v.items()}
|
||||
return v.as_dict(exclude_readonly=exclude_readonly) if hasattr(v, "as_dict") else v
|
||||
|
||||
|
||||
def _deserialize_model(model_deserializer: typing.Optional[typing.Callable], obj):
|
||||
if _is_model(obj):
|
||||
return obj
|
||||
return _deserialize(model_deserializer, obj)
|
||||
|
||||
|
||||
def _deserialize_with_optional(if_obj_deserializer: typing.Optional[typing.Callable], obj):
|
||||
if obj is None:
|
||||
return obj
|
||||
return _deserialize_with_callable(if_obj_deserializer, obj)
|
||||
|
||||
|
||||
def _deserialize_with_union(deserializers, obj):
|
||||
for deserializer in deserializers:
|
||||
try:
|
||||
return _deserialize(deserializer, obj)
|
||||
except DeserializationError:
|
||||
pass
|
||||
raise DeserializationError()
|
||||
|
||||
|
||||
def _deserialize_dict(
|
||||
value_deserializer: typing.Optional[typing.Callable],
|
||||
module: typing.Optional[str],
|
||||
obj: typing.Dict[typing.Any, typing.Any],
|
||||
):
|
||||
if obj is None:
|
||||
return obj
|
||||
return {k: _deserialize(value_deserializer, v, module) for k, v in obj.items()}
|
||||
|
||||
|
||||
def _deserialize_multiple_sequence(
|
||||
entry_deserializers: typing.List[typing.Optional[typing.Callable]],
|
||||
module: typing.Optional[str],
|
||||
obj,
|
||||
):
|
||||
if obj is None:
|
||||
return obj
|
||||
return type(obj)(_deserialize(deserializer, entry, module) for entry, deserializer in zip(obj, entry_deserializers))
|
||||
|
||||
|
||||
def _deserialize_sequence(
|
||||
deserializer: typing.Optional[typing.Callable],
|
||||
module: typing.Optional[str],
|
||||
obj,
|
||||
):
|
||||
if obj is None:
|
||||
return obj
|
||||
return type(obj)(_deserialize(deserializer, entry, module) for entry in obj)
|
||||
|
||||
|
||||
def _sorted_annotations(types: typing.List[typing.Any]) -> typing.List[typing.Any]:
|
||||
return sorted(
|
||||
types,
|
||||
key=lambda x: hasattr(x, "__name__") and x.__name__.lower() in ("str", "float", "int", "bool"),
|
||||
)
|
||||
|
||||
|
||||
def _get_deserialize_callable_from_annotation( # pylint: disable=R0911, R0915, R0912
|
||||
annotation: typing.Any,
|
||||
module: typing.Optional[str],
|
||||
rf: typing.Optional["_RestField"] = None,
|
||||
) -> typing.Optional[typing.Callable[[typing.Any], typing.Any]]:
|
||||
if not annotation or annotation in [int, float]:
|
||||
return None
|
||||
|
||||
# is it a type alias?
|
||||
if isinstance(annotation, str):
|
||||
if module is not None:
|
||||
annotation = _get_type_alias_type(module, annotation)
|
||||
|
||||
# is it a forward ref / in quotes?
|
||||
if isinstance(annotation, (str, typing.ForwardRef)):
|
||||
try:
|
||||
model_name = annotation.__forward_arg__ # type: ignore
|
||||
except AttributeError:
|
||||
model_name = annotation
|
||||
if module is not None:
|
||||
annotation = _get_model(module, model_name)
|
||||
|
||||
try:
|
||||
if module and _is_model(annotation):
|
||||
if rf:
|
||||
rf._is_model = True
|
||||
|
||||
return functools.partial(_deserialize_model, annotation) # pyright: ignore
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# is it a literal?
|
||||
try:
|
||||
if annotation.__origin__ is typing.Literal: # pyright: ignore
|
||||
return None
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
# is it optional?
|
||||
try:
|
||||
if any(a for a in annotation.__args__ if a == type(None)): # pyright: ignore
|
||||
if len(annotation.__args__) <= 2: # pyright: ignore
|
||||
if_obj_deserializer = _get_deserialize_callable_from_annotation(
|
||||
next(a for a in annotation.__args__ if a != type(None)), module, rf # pyright: ignore
|
||||
)
|
||||
|
||||
return functools.partial(_deserialize_with_optional, if_obj_deserializer)
|
||||
# the type is Optional[Union[...]], we need to remove the None type from the Union
|
||||
annotation_copy = copy.copy(annotation)
|
||||
annotation_copy.__args__ = [a for a in annotation_copy.__args__ if a != type(None)] # pyright: ignore
|
||||
return _get_deserialize_callable_from_annotation(annotation_copy, module, rf)
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
# is it union?
|
||||
if getattr(annotation, "__origin__", None) is typing.Union:
|
||||
# initial ordering is we make `string` the last deserialization option, because it is often them most generic
|
||||
deserializers = [
|
||||
_get_deserialize_callable_from_annotation(arg, module, rf)
|
||||
for arg in _sorted_annotations(annotation.__args__) # pyright: ignore
|
||||
]
|
||||
|
||||
return functools.partial(_deserialize_with_union, deserializers)
|
||||
|
||||
try:
|
||||
if annotation._name == "Dict": # pyright: ignore
|
||||
value_deserializer = _get_deserialize_callable_from_annotation(
|
||||
annotation.__args__[1], module, rf # pyright: ignore
|
||||
)
|
||||
|
||||
return functools.partial(
|
||||
_deserialize_dict,
|
||||
value_deserializer,
|
||||
module,
|
||||
)
|
||||
except (AttributeError, IndexError):
|
||||
pass
|
||||
try:
|
||||
if annotation._name in ["List", "Set", "Tuple", "Sequence"]: # pyright: ignore
|
||||
if len(annotation.__args__) > 1: # pyright: ignore
|
||||
|
||||
entry_deserializers = [
|
||||
_get_deserialize_callable_from_annotation(dt, module, rf)
|
||||
for dt in annotation.__args__ # pyright: ignore
|
||||
]
|
||||
return functools.partial(_deserialize_multiple_sequence, entry_deserializers, module)
|
||||
deserializer = _get_deserialize_callable_from_annotation(
|
||||
annotation.__args__[0], module, rf # pyright: ignore
|
||||
)
|
||||
|
||||
return functools.partial(_deserialize_sequence, deserializer, module)
|
||||
except (TypeError, IndexError, AttributeError, SyntaxError):
|
||||
pass
|
||||
|
||||
def _deserialize_default(
|
||||
deserializer,
|
||||
obj,
|
||||
):
|
||||
if obj is None:
|
||||
return obj
|
||||
try:
|
||||
return _deserialize_with_callable(deserializer, obj)
|
||||
except Exception:
|
||||
pass
|
||||
return obj
|
||||
|
||||
if get_deserializer(annotation, rf):
|
||||
return functools.partial(_deserialize_default, get_deserializer(annotation, rf))
|
||||
|
||||
return functools.partial(_deserialize_default, annotation)
|
||||
|
||||
|
||||
def _deserialize_with_callable(
|
||||
deserializer: typing.Optional[typing.Callable[[typing.Any], typing.Any]],
|
||||
value: typing.Any,
|
||||
):
|
||||
try:
|
||||
if value is None or isinstance(value, _Null):
|
||||
return None
|
||||
if deserializer is None:
|
||||
return value
|
||||
if isinstance(deserializer, CaseInsensitiveEnumMeta):
|
||||
try:
|
||||
return deserializer(value)
|
||||
except ValueError:
|
||||
# for unknown value, return raw value
|
||||
return value
|
||||
if isinstance(deserializer, type) and issubclass(deserializer, Model):
|
||||
return deserializer._deserialize(value, [])
|
||||
return typing.cast(typing.Callable[[typing.Any], typing.Any], deserializer)(value)
|
||||
except Exception as e:
|
||||
raise DeserializationError() from e
|
||||
|
||||
|
||||
def _deserialize(
|
||||
deserializer: typing.Any,
|
||||
value: typing.Any,
|
||||
module: typing.Optional[str] = None,
|
||||
rf: typing.Optional["_RestField"] = None,
|
||||
format: typing.Optional[str] = None,
|
||||
) -> typing.Any:
|
||||
if isinstance(value, PipelineResponse):
|
||||
value = value.http_response.json()
|
||||
if rf is None and format:
|
||||
rf = _RestField(format=format)
|
||||
if not isinstance(deserializer, functools.partial):
|
||||
deserializer = _get_deserialize_callable_from_annotation(deserializer, module, rf)
|
||||
return _deserialize_with_callable(deserializer, value)
|
||||
|
||||
|
||||
class _RestField:
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
name: typing.Optional[str] = None,
|
||||
type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin
|
||||
is_discriminator: bool = False,
|
||||
visibility: typing.Optional[typing.List[str]] = None,
|
||||
default: typing.Any = _UNSET,
|
||||
format: typing.Optional[str] = None,
|
||||
is_multipart_file_input: bool = False,
|
||||
):
|
||||
self._type = type
|
||||
self._rest_name_input = name
|
||||
self._module: typing.Optional[str] = None
|
||||
self._is_discriminator = is_discriminator
|
||||
self._visibility = visibility
|
||||
self._is_model = False
|
||||
self._default = default
|
||||
self._format = format
|
||||
self._is_multipart_file_input = is_multipart_file_input
|
||||
|
||||
@property
|
||||
def _class_type(self) -> typing.Any:
|
||||
return getattr(self._type, "args", [None])[0]
|
||||
|
||||
@property
|
||||
def _rest_name(self) -> str:
|
||||
if self._rest_name_input is None:
|
||||
raise ValueError("Rest name was never set")
|
||||
return self._rest_name_input
|
||||
|
||||
def __get__(self, obj: Model, type=None): # pylint: disable=redefined-builtin
|
||||
# by this point, type and rest_name will have a value bc we default
|
||||
# them in __new__ of the Model class
|
||||
item = obj.get(self._rest_name)
|
||||
if item is None:
|
||||
return item
|
||||
if self._is_model:
|
||||
return item
|
||||
return _deserialize(self._type, _serialize(item, self._format), rf=self)
|
||||
|
||||
def __set__(self, obj: Model, value) -> None:
|
||||
if value is None:
|
||||
# we want to wipe out entries if users set attr to None
|
||||
try:
|
||||
obj.__delitem__(self._rest_name)
|
||||
except KeyError:
|
||||
pass
|
||||
return
|
||||
if self._is_model:
|
||||
if not _is_model(value):
|
||||
value = _deserialize(self._type, value)
|
||||
obj.__setitem__(self._rest_name, value)
|
||||
return
|
||||
obj.__setitem__(self._rest_name, _serialize(value, self._format))
|
||||
|
||||
def _get_deserialize_callable_from_annotation(
|
||||
self, annotation: typing.Any
|
||||
) -> typing.Optional[typing.Callable[[typing.Any], typing.Any]]:
|
||||
return _get_deserialize_callable_from_annotation(annotation, self._module, self)
|
||||
|
||||
|
||||
def rest_field(
|
||||
*,
|
||||
name: typing.Optional[str] = None,
|
||||
type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin
|
||||
visibility: typing.Optional[typing.List[str]] = None,
|
||||
default: typing.Any = _UNSET,
|
||||
format: typing.Optional[str] = None,
|
||||
is_multipart_file_input: bool = False,
|
||||
) -> typing.Any:
|
||||
return _RestField(
|
||||
name=name,
|
||||
type=type,
|
||||
visibility=visibility,
|
||||
default=default,
|
||||
format=format,
|
||||
is_multipart_file_input=is_multipart_file_input,
|
||||
)
|
||||
|
||||
|
||||
def rest_discriminator(
|
||||
*,
|
||||
name: typing.Optional[str] = None,
|
||||
type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin
|
||||
visibility: typing.Optional[typing.List[str]] = None,
|
||||
) -> typing.Any:
|
||||
return _RestField(name=name, type=type, is_discriminator=True, visibility=visibility)
|
|
@ -0,0 +1,20 @@
|
|||
# ------------------------------------
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
# ------------------------------------
|
||||
"""Customize generated code here.
|
||||
|
||||
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
||||
from typing import List
|
||||
|
||||
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
|
||||
|
||||
|
||||
def patch_sdk():
|
||||
"""Do not remove from this file.
|
||||
|
||||
`patch_sdk` is a last resort escape hatch that allows you to do customizations
|
||||
you can't accomplish using the techniques described in
|
||||
https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,9 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
VERSION = "1.0.0b1"
|
|
@ -0,0 +1,23 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from ._client import ManagedIdentityClient
|
||||
|
||||
try:
|
||||
from ._patch import __all__ as _patch_all
|
||||
from ._patch import * # pylint: disable=unused-wildcard-import
|
||||
except ImportError:
|
||||
_patch_all = []
|
||||
from ._patch import patch_sdk as _patch_sdk
|
||||
|
||||
__all__ = [
|
||||
"ManagedIdentityClient",
|
||||
]
|
||||
__all__.extend([p for p in _patch_all if p not in __all__])
|
||||
|
||||
_patch_sdk()
|
|
@ -0,0 +1,114 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from copy import deepcopy
|
||||
from typing import Any, Awaitable, TYPE_CHECKING
|
||||
from typing_extensions import Self
|
||||
|
||||
from azure.core.pipeline import policies
|
||||
from azure.core.rest import AsyncHttpResponse, HttpRequest
|
||||
from azure.mgmt.core import AsyncARMPipelineClient
|
||||
from azure.mgmt.core.policies import AsyncARMAutoResourceProviderRegistrationPolicy
|
||||
|
||||
from .._serialization import Deserializer, Serializer
|
||||
from ._configuration import ManagedIdentityClientConfiguration
|
||||
from .operations import ManagedIdentityTrackedResourcesOperations
|
||||
|
||||
if TYPE_CHECKING:
|
||||
# pylint: disable=unused-import,ungrouped-imports
|
||||
from azure.core.credentials_async import AsyncTokenCredential
|
||||
|
||||
|
||||
class ManagedIdentityClient: # pylint: disable=client-accepts-api-version-keyword
|
||||
"""Arm Managed Identity Provider management API.
|
||||
|
||||
:ivar managed_identity_tracked_resources: ManagedIdentityTrackedResourcesOperations operations
|
||||
:vartype managed_identity_tracked_resources:
|
||||
azure.resourcemanager.models.commontypes.managedidentity.aio.operations.ManagedIdentityTrackedResourcesOperations
|
||||
:param credential: Credential used to authenticate requests to the service. Required.
|
||||
:type credential: ~azure.core.credentials_async.AsyncTokenCredential
|
||||
:param subscription_id: The ID of the target subscription. The value must be an UUID. Required.
|
||||
:type subscription_id: str
|
||||
:param base_url: Service host. Default value is "https://management.azure.com".
|
||||
:type base_url: str
|
||||
:keyword api_version: The API version to use for this operation. Default value is
|
||||
"2023-12-01-preview". Note that overriding this default value may result in unsupported
|
||||
behavior.
|
||||
:paramtype api_version: str
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
credential: "AsyncTokenCredential",
|
||||
subscription_id: str,
|
||||
base_url: str = "https://management.azure.com",
|
||||
**kwargs: Any
|
||||
) -> None:
|
||||
self._config = ManagedIdentityClientConfiguration(
|
||||
credential=credential, subscription_id=subscription_id, **kwargs
|
||||
)
|
||||
_policies = kwargs.pop("policies", None)
|
||||
if _policies is None:
|
||||
_policies = [
|
||||
policies.RequestIdPolicy(**kwargs),
|
||||
self._config.headers_policy,
|
||||
self._config.user_agent_policy,
|
||||
self._config.proxy_policy,
|
||||
policies.ContentDecodePolicy(**kwargs),
|
||||
AsyncARMAutoResourceProviderRegistrationPolicy(),
|
||||
self._config.redirect_policy,
|
||||
self._config.retry_policy,
|
||||
self._config.authentication_policy,
|
||||
self._config.custom_hook_policy,
|
||||
self._config.logging_policy,
|
||||
policies.DistributedTracingPolicy(**kwargs),
|
||||
policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None,
|
||||
self._config.http_logging_policy,
|
||||
]
|
||||
self._client: AsyncARMPipelineClient = AsyncARMPipelineClient(base_url=base_url, policies=_policies, **kwargs)
|
||||
|
||||
self._serialize = Serializer()
|
||||
self._deserialize = Deserializer()
|
||||
self._serialize.client_side_validation = False
|
||||
self.managed_identity_tracked_resources = ManagedIdentityTrackedResourcesOperations(
|
||||
self._client, self._config, self._serialize, self._deserialize
|
||||
)
|
||||
|
||||
def send_request(
|
||||
self, request: HttpRequest, *, stream: bool = False, **kwargs: Any
|
||||
) -> Awaitable[AsyncHttpResponse]:
|
||||
"""Runs the network request through the client's chained policies.
|
||||
|
||||
>>> from azure.core.rest import HttpRequest
|
||||
>>> request = HttpRequest("GET", "https://www.example.org/")
|
||||
<HttpRequest [GET], url: 'https://www.example.org/'>
|
||||
>>> response = await client.send_request(request)
|
||||
<AsyncHttpResponse: 200 OK>
|
||||
|
||||
For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request
|
||||
|
||||
:param request: The network request you want to make. Required.
|
||||
:type request: ~azure.core.rest.HttpRequest
|
||||
:keyword bool stream: Whether the response payload will be streamed. Defaults to False.
|
||||
:return: The response of your network call. Does not do error handling on your response.
|
||||
:rtype: ~azure.core.rest.AsyncHttpResponse
|
||||
"""
|
||||
|
||||
request_copy = deepcopy(request)
|
||||
request_copy.url = self._client.format_url(request_copy.url)
|
||||
return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore
|
||||
|
||||
async def close(self) -> None:
|
||||
await self._client.close()
|
||||
|
||||
async def __aenter__(self) -> Self:
|
||||
await self._client.__aenter__()
|
||||
return self
|
||||
|
||||
async def __aexit__(self, *exc_details: Any) -> None:
|
||||
await self._client.__aexit__(*exc_details)
|
|
@ -0,0 +1,66 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from typing import Any, TYPE_CHECKING
|
||||
|
||||
from azure.core.pipeline import policies
|
||||
from azure.mgmt.core.policies import ARMHttpLoggingPolicy, AsyncARMChallengeAuthenticationPolicy
|
||||
|
||||
from .._version import VERSION
|
||||
|
||||
if TYPE_CHECKING:
|
||||
# pylint: disable=unused-import,ungrouped-imports
|
||||
from azure.core.credentials_async import AsyncTokenCredential
|
||||
|
||||
|
||||
class ManagedIdentityClientConfiguration: # pylint: disable=too-many-instance-attributes,name-too-long
|
||||
"""Configuration for ManagedIdentityClient.
|
||||
|
||||
Note that all parameters used to create this instance are saved as instance
|
||||
attributes.
|
||||
|
||||
:param credential: Credential used to authenticate requests to the service. Required.
|
||||
:type credential: ~azure.core.credentials_async.AsyncTokenCredential
|
||||
:param subscription_id: The ID of the target subscription. The value must be an UUID. Required.
|
||||
:type subscription_id: str
|
||||
:keyword api_version: The API version to use for this operation. Default value is
|
||||
"2023-12-01-preview". Note that overriding this default value may result in unsupported
|
||||
behavior.
|
||||
:paramtype api_version: str
|
||||
"""
|
||||
|
||||
def __init__(self, credential: "AsyncTokenCredential", subscription_id: str, **kwargs: Any) -> None:
|
||||
api_version: str = kwargs.pop("api_version", "2023-12-01-preview")
|
||||
|
||||
if credential is None:
|
||||
raise ValueError("Parameter 'credential' must not be None.")
|
||||
if subscription_id is None:
|
||||
raise ValueError("Parameter 'subscription_id' must not be None.")
|
||||
|
||||
self.credential = credential
|
||||
self.subscription_id = subscription_id
|
||||
self.api_version = api_version
|
||||
self.credential_scopes = kwargs.pop("credential_scopes", ["https://management.azure.com/.default"])
|
||||
kwargs.setdefault("sdk_moniker", "resourcemanager-models-commontypes-managedidentity/{}".format(VERSION))
|
||||
self.polling_interval = kwargs.get("polling_interval", 30)
|
||||
self._configure(**kwargs)
|
||||
|
||||
def _configure(self, **kwargs: Any) -> None:
|
||||
self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs)
|
||||
self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs)
|
||||
self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs)
|
||||
self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs)
|
||||
self.http_logging_policy = kwargs.get("http_logging_policy") or ARMHttpLoggingPolicy(**kwargs)
|
||||
self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs)
|
||||
self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs)
|
||||
self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs)
|
||||
self.authentication_policy = kwargs.get("authentication_policy")
|
||||
if self.credential and not self.authentication_policy:
|
||||
self.authentication_policy = AsyncARMChallengeAuthenticationPolicy(
|
||||
self.credential, *self.credential_scopes, **kwargs
|
||||
)
|
|
@ -0,0 +1,20 @@
|
|||
# ------------------------------------
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
# ------------------------------------
|
||||
"""Customize generated code here.
|
||||
|
||||
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
||||
from typing import List
|
||||
|
||||
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
|
||||
|
||||
|
||||
def patch_sdk():
|
||||
"""Do not remove from this file.
|
||||
|
||||
`patch_sdk` is a last resort escape hatch that allows you to do customizations
|
||||
you can't accomplish using the techniques described in
|
||||
https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
|
@ -0,0 +1,19 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from ._operations import ManagedIdentityTrackedResourcesOperations
|
||||
|
||||
from ._patch import __all__ as _patch_all
|
||||
from ._patch import * # pylint: disable=unused-wildcard-import
|
||||
from ._patch import patch_sdk as _patch_sdk
|
||||
|
||||
__all__ = [
|
||||
"ManagedIdentityTrackedResourcesOperations",
|
||||
]
|
||||
__all__.extend([p for p in _patch_all if p not in __all__])
|
||||
_patch_sdk()
|
|
@ -0,0 +1,940 @@
|
|||
# pylint: disable=too-many-lines,too-many-statements
|
||||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
from io import IOBase
|
||||
import json
|
||||
import sys
|
||||
from typing import Any, Callable, Dict, IO, Optional, Type, TypeVar, Union, overload
|
||||
|
||||
from azure.core.exceptions import (
|
||||
ClientAuthenticationError,
|
||||
HttpResponseError,
|
||||
ResourceExistsError,
|
||||
ResourceNotFoundError,
|
||||
ResourceNotModifiedError,
|
||||
StreamClosedError,
|
||||
StreamConsumedError,
|
||||
map_error,
|
||||
)
|
||||
from azure.core.pipeline import PipelineResponse
|
||||
from azure.core.rest import AsyncHttpResponse, HttpRequest
|
||||
from azure.core.tracing.decorator_async import distributed_trace_async
|
||||
from azure.core.utils import case_insensitive_dict
|
||||
from azure.mgmt.core.exceptions import ARMErrorFormat
|
||||
|
||||
from ... import models as _models
|
||||
from ..._model_base import SdkJSONEncoder, _deserialize
|
||||
from ...operations._operations import (
|
||||
build_managed_identity_tracked_resources_create_with_system_assigned_request,
|
||||
build_managed_identity_tracked_resources_get_request,
|
||||
build_managed_identity_tracked_resources_update_with_user_assigned_and_system_assigned_request,
|
||||
)
|
||||
|
||||
if sys.version_info >= (3, 9):
|
||||
from collections.abc import MutableMapping
|
||||
else:
|
||||
from typing import MutableMapping # type: ignore # pylint: disable=ungrouped-imports
|
||||
JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object
|
||||
T = TypeVar("T")
|
||||
ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]]
|
||||
|
||||
|
||||
class ManagedIdentityTrackedResourcesOperations: # pylint: disable=name-too-long
|
||||
"""
|
||||
.. warning::
|
||||
**DO NOT** instantiate this class directly.
|
||||
|
||||
Instead, you should access the following operations through
|
||||
:class:`~azure.resourcemanager.models.commontypes.managedidentity.aio.ManagedIdentityClient`'s
|
||||
:attr:`managed_identity_tracked_resources` attribute.
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs) -> None:
|
||||
input_args = list(args)
|
||||
self._client = input_args.pop(0) if input_args else kwargs.pop("client")
|
||||
self._config = input_args.pop(0) if input_args else kwargs.pop("config")
|
||||
self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer")
|
||||
self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer")
|
||||
|
||||
@distributed_trace_async
|
||||
async def get(
|
||||
self, resource_group_name: str, managed_identity_tracked_resource_name: str, **kwargs: Any
|
||||
) -> _models.ManagedIdentityTrackedResource:
|
||||
"""Get a ManagedIdentityTrackedResource.
|
||||
|
||||
:param resource_group_name: The name of the resource group. The name is case insensitive.
|
||||
Required.
|
||||
:type resource_group_name: str
|
||||
:param managed_identity_tracked_resource_name: arm resource name for path. Required.
|
||||
:type managed_identity_tracked_resource_name: str
|
||||
:return: ManagedIdentityTrackedResource. The ManagedIdentityTrackedResource is compatible with
|
||||
MutableMapping
|
||||
:rtype:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
"""
|
||||
error_map: MutableMapping[int, Type[HttpResponseError]] = {
|
||||
401: ClientAuthenticationError,
|
||||
404: ResourceNotFoundError,
|
||||
409: ResourceExistsError,
|
||||
304: ResourceNotModifiedError,
|
||||
}
|
||||
error_map.update(kwargs.pop("error_map", {}) or {})
|
||||
|
||||
_headers = kwargs.pop("headers", {}) or {}
|
||||
_params = kwargs.pop("params", {}) or {}
|
||||
|
||||
cls: ClsType[_models.ManagedIdentityTrackedResource] = kwargs.pop("cls", None)
|
||||
|
||||
_request = build_managed_identity_tracked_resources_get_request(
|
||||
resource_group_name=resource_group_name,
|
||||
managed_identity_tracked_resource_name=managed_identity_tracked_resource_name,
|
||||
subscription_id=self._config.subscription_id,
|
||||
api_version=self._config.api_version,
|
||||
headers=_headers,
|
||||
params=_params,
|
||||
)
|
||||
_request.url = self._client.format_url(_request.url)
|
||||
|
||||
_stream = kwargs.pop("stream", False)
|
||||
pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access
|
||||
_request, stream=_stream, **kwargs
|
||||
)
|
||||
|
||||
response = pipeline_response.http_response
|
||||
|
||||
if response.status_code not in [200]:
|
||||
if _stream:
|
||||
try:
|
||||
await response.read() # Load the body in memory and close the socket
|
||||
except (StreamConsumedError, StreamClosedError):
|
||||
pass
|
||||
map_error(status_code=response.status_code, response=response, error_map=error_map)
|
||||
error = _deserialize(_models.ErrorResponse, response.json())
|
||||
raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat)
|
||||
|
||||
if _stream:
|
||||
deserialized = response.iter_bytes()
|
||||
else:
|
||||
deserialized = _deserialize(_models.ManagedIdentityTrackedResource, response.json())
|
||||
|
||||
if cls:
|
||||
return cls(pipeline_response, deserialized, {}) # type: ignore
|
||||
|
||||
return deserialized # type: ignore
|
||||
|
||||
@overload
|
||||
async def create_with_system_assigned(
|
||||
self,
|
||||
resource_group_name: str,
|
||||
managed_identity_tracked_resource_name: str,
|
||||
resource: _models.ManagedIdentityTrackedResource,
|
||||
*,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
) -> _models.ManagedIdentityTrackedResource:
|
||||
"""Create a ManagedIdentityTrackedResource.
|
||||
|
||||
:param resource_group_name: The name of the resource group. The name is case insensitive.
|
||||
Required.
|
||||
:type resource_group_name: str
|
||||
:param managed_identity_tracked_resource_name: arm resource name for path. Required.
|
||||
:type managed_identity_tracked_resource_name: str
|
||||
:param resource: Resource create parameters. Required.
|
||||
:type resource:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for JSON body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
:return: ManagedIdentityTrackedResource. The ManagedIdentityTrackedResource is compatible with
|
||||
MutableMapping
|
||||
:rtype:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
resource = {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
|
||||
# response body for status code(s): 200, 201
|
||||
response == {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
"""
|
||||
|
||||
@overload
|
||||
async def create_with_system_assigned(
|
||||
self,
|
||||
resource_group_name: str,
|
||||
managed_identity_tracked_resource_name: str,
|
||||
resource: JSON,
|
||||
*,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
) -> _models.ManagedIdentityTrackedResource:
|
||||
"""Create a ManagedIdentityTrackedResource.
|
||||
|
||||
:param resource_group_name: The name of the resource group. The name is case insensitive.
|
||||
Required.
|
||||
:type resource_group_name: str
|
||||
:param managed_identity_tracked_resource_name: arm resource name for path. Required.
|
||||
:type managed_identity_tracked_resource_name: str
|
||||
:param resource: Resource create parameters. Required.
|
||||
:type resource: JSON
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for JSON body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
:return: ManagedIdentityTrackedResource. The ManagedIdentityTrackedResource is compatible with
|
||||
MutableMapping
|
||||
:rtype:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# response body for status code(s): 200, 201
|
||||
response == {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
"""
|
||||
|
||||
@overload
|
||||
async def create_with_system_assigned(
|
||||
self,
|
||||
resource_group_name: str,
|
||||
managed_identity_tracked_resource_name: str,
|
||||
resource: IO[bytes],
|
||||
*,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
) -> _models.ManagedIdentityTrackedResource:
|
||||
"""Create a ManagedIdentityTrackedResource.
|
||||
|
||||
:param resource_group_name: The name of the resource group. The name is case insensitive.
|
||||
Required.
|
||||
:type resource_group_name: str
|
||||
:param managed_identity_tracked_resource_name: arm resource name for path. Required.
|
||||
:type managed_identity_tracked_resource_name: str
|
||||
:param resource: Resource create parameters. Required.
|
||||
:type resource: IO[bytes]
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for binary body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
:return: ManagedIdentityTrackedResource. The ManagedIdentityTrackedResource is compatible with
|
||||
MutableMapping
|
||||
:rtype:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# response body for status code(s): 200, 201
|
||||
response == {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
"""
|
||||
|
||||
@distributed_trace_async
|
||||
async def create_with_system_assigned(
|
||||
self,
|
||||
resource_group_name: str,
|
||||
managed_identity_tracked_resource_name: str,
|
||||
resource: Union[_models.ManagedIdentityTrackedResource, JSON, IO[bytes]],
|
||||
**kwargs: Any
|
||||
) -> _models.ManagedIdentityTrackedResource:
|
||||
"""Create a ManagedIdentityTrackedResource.
|
||||
|
||||
:param resource_group_name: The name of the resource group. The name is case insensitive.
|
||||
Required.
|
||||
:type resource_group_name: str
|
||||
:param managed_identity_tracked_resource_name: arm resource name for path. Required.
|
||||
:type managed_identity_tracked_resource_name: str
|
||||
:param resource: Resource create parameters. Is one of the following types:
|
||||
ManagedIdentityTrackedResource, JSON, IO[bytes] Required.
|
||||
:type resource:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
or JSON or IO[bytes]
|
||||
:return: ManagedIdentityTrackedResource. The ManagedIdentityTrackedResource is compatible with
|
||||
MutableMapping
|
||||
:rtype:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
resource = {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
|
||||
# response body for status code(s): 200, 201
|
||||
response == {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
"""
|
||||
error_map: MutableMapping[int, Type[HttpResponseError]] = {
|
||||
401: ClientAuthenticationError,
|
||||
404: ResourceNotFoundError,
|
||||
409: ResourceExistsError,
|
||||
304: ResourceNotModifiedError,
|
||||
}
|
||||
error_map.update(kwargs.pop("error_map", {}) or {})
|
||||
|
||||
_headers = case_insensitive_dict(kwargs.pop("headers", {}) or {})
|
||||
_params = kwargs.pop("params", {}) or {}
|
||||
|
||||
content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None))
|
||||
cls: ClsType[_models.ManagedIdentityTrackedResource] = kwargs.pop("cls", None)
|
||||
|
||||
content_type = content_type or "application/json"
|
||||
_content = None
|
||||
if isinstance(resource, (IOBase, bytes)):
|
||||
_content = resource
|
||||
else:
|
||||
_content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore
|
||||
|
||||
_request = build_managed_identity_tracked_resources_create_with_system_assigned_request(
|
||||
resource_group_name=resource_group_name,
|
||||
managed_identity_tracked_resource_name=managed_identity_tracked_resource_name,
|
||||
subscription_id=self._config.subscription_id,
|
||||
content_type=content_type,
|
||||
api_version=self._config.api_version,
|
||||
content=_content,
|
||||
headers=_headers,
|
||||
params=_params,
|
||||
)
|
||||
_request.url = self._client.format_url(_request.url)
|
||||
|
||||
_stream = kwargs.pop("stream", False)
|
||||
pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access
|
||||
_request, stream=_stream, **kwargs
|
||||
)
|
||||
|
||||
response = pipeline_response.http_response
|
||||
|
||||
if response.status_code not in [200, 201]:
|
||||
if _stream:
|
||||
try:
|
||||
await response.read() # Load the body in memory and close the socket
|
||||
except (StreamConsumedError, StreamClosedError):
|
||||
pass
|
||||
map_error(status_code=response.status_code, response=response, error_map=error_map)
|
||||
error = _deserialize(_models.ErrorResponse, response.json())
|
||||
raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat)
|
||||
|
||||
if response.status_code == 200:
|
||||
if _stream:
|
||||
deserialized = response.iter_bytes()
|
||||
else:
|
||||
deserialized = _deserialize(_models.ManagedIdentityTrackedResource, response.json())
|
||||
|
||||
if response.status_code == 201:
|
||||
if _stream:
|
||||
deserialized = response.iter_bytes()
|
||||
else:
|
||||
deserialized = _deserialize(_models.ManagedIdentityTrackedResource, response.json())
|
||||
|
||||
if cls:
|
||||
return cls(pipeline_response, deserialized, {}) # type: ignore
|
||||
|
||||
return deserialized # type: ignore
|
||||
|
||||
@overload
|
||||
async def update_with_user_assigned_and_system_assigned( # pylint: disable=name-too-long
|
||||
self,
|
||||
resource_group_name: str,
|
||||
managed_identity_tracked_resource_name: str,
|
||||
properties: _models.ManagedIdentityTrackedResource,
|
||||
*,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
) -> _models.ManagedIdentityTrackedResource:
|
||||
"""Update a ManagedIdentityTrackedResource.
|
||||
|
||||
:param resource_group_name: The name of the resource group. The name is case insensitive.
|
||||
Required.
|
||||
:type resource_group_name: str
|
||||
:param managed_identity_tracked_resource_name: arm resource name for path. Required.
|
||||
:type managed_identity_tracked_resource_name: str
|
||||
:param properties: The resource properties to be updated. Required.
|
||||
:type properties:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for JSON body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
:return: ManagedIdentityTrackedResource. The ManagedIdentityTrackedResource is compatible with
|
||||
MutableMapping
|
||||
:rtype:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
properties = {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
"""
|
||||
|
||||
@overload
|
||||
async def update_with_user_assigned_and_system_assigned( # pylint: disable=name-too-long
|
||||
self,
|
||||
resource_group_name: str,
|
||||
managed_identity_tracked_resource_name: str,
|
||||
properties: JSON,
|
||||
*,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
) -> _models.ManagedIdentityTrackedResource:
|
||||
"""Update a ManagedIdentityTrackedResource.
|
||||
|
||||
:param resource_group_name: The name of the resource group. The name is case insensitive.
|
||||
Required.
|
||||
:type resource_group_name: str
|
||||
:param managed_identity_tracked_resource_name: arm resource name for path. Required.
|
||||
:type managed_identity_tracked_resource_name: str
|
||||
:param properties: The resource properties to be updated. Required.
|
||||
:type properties: JSON
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for JSON body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
:return: ManagedIdentityTrackedResource. The ManagedIdentityTrackedResource is compatible with
|
||||
MutableMapping
|
||||
:rtype:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
"""
|
||||
|
||||
@overload
|
||||
async def update_with_user_assigned_and_system_assigned( # pylint: disable=name-too-long
|
||||
self,
|
||||
resource_group_name: str,
|
||||
managed_identity_tracked_resource_name: str,
|
||||
properties: IO[bytes],
|
||||
*,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
) -> _models.ManagedIdentityTrackedResource:
|
||||
"""Update a ManagedIdentityTrackedResource.
|
||||
|
||||
:param resource_group_name: The name of the resource group. The name is case insensitive.
|
||||
Required.
|
||||
:type resource_group_name: str
|
||||
:param managed_identity_tracked_resource_name: arm resource name for path. Required.
|
||||
:type managed_identity_tracked_resource_name: str
|
||||
:param properties: The resource properties to be updated. Required.
|
||||
:type properties: IO[bytes]
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for binary body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
:return: ManagedIdentityTrackedResource. The ManagedIdentityTrackedResource is compatible with
|
||||
MutableMapping
|
||||
:rtype:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
"""
|
||||
|
||||
@distributed_trace_async
|
||||
async def update_with_user_assigned_and_system_assigned( # pylint: disable=name-too-long
|
||||
self,
|
||||
resource_group_name: str,
|
||||
managed_identity_tracked_resource_name: str,
|
||||
properties: Union[_models.ManagedIdentityTrackedResource, JSON, IO[bytes]],
|
||||
**kwargs: Any
|
||||
) -> _models.ManagedIdentityTrackedResource:
|
||||
"""Update a ManagedIdentityTrackedResource.
|
||||
|
||||
:param resource_group_name: The name of the resource group. The name is case insensitive.
|
||||
Required.
|
||||
:type resource_group_name: str
|
||||
:param managed_identity_tracked_resource_name: arm resource name for path. Required.
|
||||
:type managed_identity_tracked_resource_name: str
|
||||
:param properties: The resource properties to be updated. Is one of the following types:
|
||||
ManagedIdentityTrackedResource, JSON, IO[bytes] Required.
|
||||
:type properties:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
or JSON or IO[bytes]
|
||||
:return: ManagedIdentityTrackedResource. The ManagedIdentityTrackedResource is compatible with
|
||||
MutableMapping
|
||||
:rtype:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResource
|
||||
:raises ~azure.core.exceptions.HttpResponseError:
|
||||
|
||||
Example:
|
||||
.. code-block:: python
|
||||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
properties = {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
|
||||
# response body for status code(s): 200
|
||||
response == {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {
|
||||
"str": {
|
||||
"clientId": "str",
|
||||
"principalId": "str"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
"""
|
||||
error_map: MutableMapping[int, Type[HttpResponseError]] = {
|
||||
401: ClientAuthenticationError,
|
||||
404: ResourceNotFoundError,
|
||||
409: ResourceExistsError,
|
||||
304: ResourceNotModifiedError,
|
||||
}
|
||||
error_map.update(kwargs.pop("error_map", {}) or {})
|
||||
|
||||
_headers = case_insensitive_dict(kwargs.pop("headers", {}) or {})
|
||||
_params = kwargs.pop("params", {}) or {}
|
||||
|
||||
content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None))
|
||||
cls: ClsType[_models.ManagedIdentityTrackedResource] = kwargs.pop("cls", None)
|
||||
|
||||
content_type = content_type or "application/json"
|
||||
_content = None
|
||||
if isinstance(properties, (IOBase, bytes)):
|
||||
_content = properties
|
||||
else:
|
||||
_content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore
|
||||
|
||||
_request = build_managed_identity_tracked_resources_update_with_user_assigned_and_system_assigned_request(
|
||||
resource_group_name=resource_group_name,
|
||||
managed_identity_tracked_resource_name=managed_identity_tracked_resource_name,
|
||||
subscription_id=self._config.subscription_id,
|
||||
content_type=content_type,
|
||||
api_version=self._config.api_version,
|
||||
content=_content,
|
||||
headers=_headers,
|
||||
params=_params,
|
||||
)
|
||||
_request.url = self._client.format_url(_request.url)
|
||||
|
||||
_stream = kwargs.pop("stream", False)
|
||||
pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access
|
||||
_request, stream=_stream, **kwargs
|
||||
)
|
||||
|
||||
response = pipeline_response.http_response
|
||||
|
||||
if response.status_code not in [200]:
|
||||
if _stream:
|
||||
try:
|
||||
await response.read() # Load the body in memory and close the socket
|
||||
except (StreamConsumedError, StreamClosedError):
|
||||
pass
|
||||
map_error(status_code=response.status_code, response=response, error_map=error_map)
|
||||
error = _deserialize(_models.ErrorResponse, response.json())
|
||||
raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat)
|
||||
|
||||
if _stream:
|
||||
deserialized = response.iter_bytes()
|
||||
else:
|
||||
deserialized = _deserialize(_models.ManagedIdentityTrackedResource, response.json())
|
||||
|
||||
if cls:
|
||||
return cls(pipeline_response, deserialized, {}) # type: ignore
|
||||
|
||||
return deserialized # type: ignore
|
|
@ -0,0 +1,20 @@
|
|||
# ------------------------------------
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
# ------------------------------------
|
||||
"""Customize generated code here.
|
||||
|
||||
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
||||
from typing import List
|
||||
|
||||
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
|
||||
|
||||
|
||||
def patch_sdk():
|
||||
"""Do not remove from this file.
|
||||
|
||||
`patch_sdk` is a last resort escape hatch that allows you to do customizations
|
||||
you can't accomplish using the techniques described in
|
||||
https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
|
@ -0,0 +1,41 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from ._models import ErrorAdditionalInfo
|
||||
from ._models import ErrorDetail
|
||||
from ._models import ErrorResponse
|
||||
from ._models import ManagedIdentityTrackedResource
|
||||
from ._models import ManagedIdentityTrackedResourceProperties
|
||||
from ._models import ManagedServiceIdentity
|
||||
from ._models import Resource
|
||||
from ._models import SystemData
|
||||
from ._models import TrackedResource
|
||||
from ._models import UserAssignedIdentity
|
||||
|
||||
from ._enums import CreatedByType
|
||||
from ._enums import ManagedServiceIdentityType
|
||||
from ._patch import __all__ as _patch_all
|
||||
from ._patch import * # pylint: disable=unused-wildcard-import
|
||||
from ._patch import patch_sdk as _patch_sdk
|
||||
|
||||
__all__ = [
|
||||
"ErrorAdditionalInfo",
|
||||
"ErrorDetail",
|
||||
"ErrorResponse",
|
||||
"ManagedIdentityTrackedResource",
|
||||
"ManagedIdentityTrackedResourceProperties",
|
||||
"ManagedServiceIdentity",
|
||||
"Resource",
|
||||
"SystemData",
|
||||
"TrackedResource",
|
||||
"UserAssignedIdentity",
|
||||
"CreatedByType",
|
||||
"ManagedServiceIdentityType",
|
||||
]
|
||||
__all__.extend([p for p in _patch_all if p not in __all__])
|
||||
_patch_sdk()
|
|
@ -0,0 +1,38 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from enum import Enum
|
||||
from azure.core import CaseInsensitiveEnumMeta
|
||||
|
||||
|
||||
class CreatedByType(str, Enum, metaclass=CaseInsensitiveEnumMeta):
|
||||
"""The kind of entity that created the resource."""
|
||||
|
||||
USER = "User"
|
||||
"""The entity was created by a user."""
|
||||
APPLICATION = "Application"
|
||||
"""The entity was created by an application."""
|
||||
MANAGED_IDENTITY = "ManagedIdentity"
|
||||
"""The entity was created by a managed identity."""
|
||||
KEY = "Key"
|
||||
"""The entity was created by a key."""
|
||||
|
||||
|
||||
class ManagedServiceIdentityType(str, Enum, metaclass=CaseInsensitiveEnumMeta):
|
||||
"""Type of managed service identity (where both SystemAssigned and UserAssigned types are
|
||||
allowed).
|
||||
"""
|
||||
|
||||
NONE = "None"
|
||||
"""No managed identity."""
|
||||
SYSTEM_ASSIGNED = "SystemAssigned"
|
||||
"""System assigned managed identity."""
|
||||
USER_ASSIGNED = "UserAssigned"
|
||||
"""User assigned managed identity."""
|
||||
SYSTEM_AND_USER_ASSIGNED_V3 = "SystemAssigned,UserAssigned"
|
||||
"""System and user assigned managed identity."""
|
|
@ -0,0 +1,382 @@
|
|||
# coding=utf-8
|
||||
# pylint: disable=too-many-lines
|
||||
# --------------------------------------------------------------------------
|
||||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
import datetime
|
||||
from typing import Any, Dict, List, Mapping, Optional, TYPE_CHECKING, Union, overload
|
||||
|
||||
from .. import _model_base
|
||||
from .._model_base import rest_field
|
||||
|
||||
if TYPE_CHECKING:
|
||||
# pylint: disable=unused-import,ungrouped-imports
|
||||
from .. import models as _models
|
||||
|
||||
|
||||
class ErrorAdditionalInfo(_model_base.Model):
|
||||
"""The resource management error additional info.
|
||||
|
||||
Readonly variables are only populated by the server, and will be ignored when sending a request.
|
||||
|
||||
:ivar type: The additional info type.
|
||||
:vartype type: str
|
||||
:ivar info: The additional info.
|
||||
:vartype info: any
|
||||
"""
|
||||
|
||||
type: Optional[str] = rest_field(visibility=["read"])
|
||||
"""The additional info type."""
|
||||
info: Optional[Any] = rest_field(visibility=["read"])
|
||||
"""The additional info."""
|
||||
|
||||
|
||||
class ErrorDetail(_model_base.Model):
|
||||
"""The error detail.
|
||||
|
||||
Readonly variables are only populated by the server, and will be ignored when sending a request.
|
||||
|
||||
:ivar code: The error code.
|
||||
:vartype code: str
|
||||
:ivar message: The error message.
|
||||
:vartype message: str
|
||||
:ivar target: The error target.
|
||||
:vartype target: str
|
||||
:ivar details: The error details.
|
||||
:vartype details:
|
||||
list[~azure.resourcemanager.models.commontypes.managedidentity.models.ErrorDetail]
|
||||
:ivar additional_info: The error additional info.
|
||||
:vartype additional_info:
|
||||
list[~azure.resourcemanager.models.commontypes.managedidentity.models.ErrorAdditionalInfo]
|
||||
"""
|
||||
|
||||
code: Optional[str] = rest_field(visibility=["read"])
|
||||
"""The error code."""
|
||||
message: Optional[str] = rest_field(visibility=["read"])
|
||||
"""The error message."""
|
||||
target: Optional[str] = rest_field(visibility=["read"])
|
||||
"""The error target."""
|
||||
details: Optional[List["_models.ErrorDetail"]] = rest_field(visibility=["read"])
|
||||
"""The error details."""
|
||||
additional_info: Optional[List["_models.ErrorAdditionalInfo"]] = rest_field(
|
||||
name="additionalInfo", visibility=["read"]
|
||||
)
|
||||
"""The error additional info."""
|
||||
|
||||
|
||||
class ErrorResponse(_model_base.Model):
|
||||
"""Common error response for all Azure Resource Manager APIs to return error details for failed
|
||||
operations.
|
||||
|
||||
:ivar error: The error object.
|
||||
:vartype error: ~azure.resourcemanager.models.commontypes.managedidentity.models.ErrorDetail
|
||||
"""
|
||||
|
||||
error: Optional["_models.ErrorDetail"] = rest_field()
|
||||
"""The error object."""
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
error: Optional["_models.ErrorDetail"] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class Resource(_model_base.Model):
|
||||
"""Common fields that are returned in the response for all Azure Resource Manager resources.
|
||||
|
||||
Readonly variables are only populated by the server, and will be ignored when sending a request.
|
||||
|
||||
:ivar id: Fully qualified resource ID for the resource. Ex -
|
||||
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. # pylint: disable=line-too-long
|
||||
:vartype id: str
|
||||
:ivar name: The name of the resource.
|
||||
:vartype name: str
|
||||
:ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
|
||||
"Microsoft.Storage/storageAccounts".
|
||||
:vartype type: str
|
||||
:ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
|
||||
information.
|
||||
:vartype system_data:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.SystemData
|
||||
"""
|
||||
|
||||
id: Optional[str] = rest_field(visibility=["read"])
|
||||
"""Fully qualified resource ID for the resource. Ex -
|
||||
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. # pylint: disable=line-too-long"""
|
||||
name: Optional[str] = rest_field(visibility=["read"])
|
||||
"""The name of the resource."""
|
||||
type: Optional[str] = rest_field(visibility=["read"])
|
||||
"""The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or
|
||||
\"Microsoft.Storage/storageAccounts\"."""
|
||||
system_data: Optional["_models.SystemData"] = rest_field(name="systemData", visibility=["read"])
|
||||
"""Azure Resource Manager metadata containing createdBy and modifiedBy information."""
|
||||
|
||||
|
||||
class TrackedResource(Resource):
|
||||
"""The resource model definition for an Azure Resource Manager tracked top level resource which
|
||||
has 'tags' and a 'location'.
|
||||
|
||||
Readonly variables are only populated by the server, and will be ignored when sending a request.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar id: Fully qualified resource ID for the resource. Ex -
|
||||
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. # pylint: disable=line-too-long
|
||||
:vartype id: str
|
||||
:ivar name: The name of the resource.
|
||||
:vartype name: str
|
||||
:ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
|
||||
"Microsoft.Storage/storageAccounts".
|
||||
:vartype type: str
|
||||
:ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
|
||||
information.
|
||||
:vartype system_data:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.SystemData
|
||||
:ivar tags: Resource tags.
|
||||
:vartype tags: dict[str, str]
|
||||
:ivar location: The geo-location where the resource lives. Required.
|
||||
:vartype location: str
|
||||
"""
|
||||
|
||||
tags: Optional[Dict[str, str]] = rest_field()
|
||||
"""Resource tags."""
|
||||
location: str = rest_field(visibility=["read", "create"])
|
||||
"""The geo-location where the resource lives. Required."""
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
location: str,
|
||||
tags: Optional[Dict[str, str]] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class ManagedIdentityTrackedResource(TrackedResource):
|
||||
"""Concrete tracked resource types can be created by aliasing this type using a specific property
|
||||
type.
|
||||
|
||||
Readonly variables are only populated by the server, and will be ignored when sending a request.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar id: Fully qualified resource ID for the resource. Ex -
|
||||
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. # pylint: disable=line-too-long
|
||||
:vartype id: str
|
||||
:ivar name: The name of the resource.
|
||||
:vartype name: str
|
||||
:ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
|
||||
"Microsoft.Storage/storageAccounts".
|
||||
:vartype type: str
|
||||
:ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
|
||||
information.
|
||||
:vartype system_data:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.SystemData
|
||||
:ivar tags: Resource tags.
|
||||
:vartype tags: dict[str, str]
|
||||
:ivar location: The geo-location where the resource lives. Required.
|
||||
:vartype location: str
|
||||
:ivar properties: The resource-specific properties for this resource.
|
||||
:vartype properties:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedIdentityTrackedResourceProperties
|
||||
:ivar identity: The managed service identities assigned to this resource.
|
||||
:vartype identity:
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedServiceIdentity
|
||||
"""
|
||||
|
||||
properties: Optional["_models.ManagedIdentityTrackedResourceProperties"] = rest_field()
|
||||
"""The resource-specific properties for this resource."""
|
||||
identity: Optional["_models.ManagedServiceIdentity"] = rest_field()
|
||||
"""The managed service identities assigned to this resource."""
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
location: str,
|
||||
tags: Optional[Dict[str, str]] = None,
|
||||
properties: Optional["_models.ManagedIdentityTrackedResourceProperties"] = None,
|
||||
identity: Optional["_models.ManagedServiceIdentity"] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class ManagedIdentityTrackedResourceProperties(_model_base.Model):
|
||||
"""Managed Identity Arm Resource Properties.
|
||||
|
||||
Readonly variables are only populated by the server, and will be ignored when sending a request.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar provisioning_state: The status of the last operation. Required.
|
||||
:vartype provisioning_state: str
|
||||
"""
|
||||
|
||||
provisioning_state: str = rest_field(name="provisioningState", visibility=["read"])
|
||||
"""The status of the last operation. Required."""
|
||||
|
||||
|
||||
class ManagedServiceIdentity(_model_base.Model):
|
||||
"""Managed service identity (system assigned and/or user assigned identities).
|
||||
|
||||
Readonly variables are only populated by the server, and will be ignored when sending a request.
|
||||
|
||||
All required parameters must be populated in order to send to server.
|
||||
|
||||
:ivar principal_id: The service principal ID of the system assigned identity. This property
|
||||
will only be provided for a system assigned identity.
|
||||
:vartype principal_id: str
|
||||
:ivar tenant_id: The tenant ID of the system assigned identity. This property will only be
|
||||
provided for a system assigned identity.
|
||||
:vartype tenant_id: str
|
||||
:ivar type: The type of managed identity assigned to this resource. Required. Known values are:
|
||||
"None", "SystemAssigned", "UserAssigned", and "SystemAssigned,UserAssigned".
|
||||
:vartype type: str or
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.ManagedServiceIdentityType
|
||||
:ivar user_assigned_identities: The identities assigned to this resource by the user.
|
||||
:vartype user_assigned_identities: dict[str,
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.UserAssignedIdentity]
|
||||
"""
|
||||
|
||||
principal_id: Optional[str] = rest_field(name="principalId", visibility=["read"])
|
||||
"""The service principal ID of the system assigned identity. This property will only be provided
|
||||
for a system assigned identity."""
|
||||
tenant_id: Optional[str] = rest_field(name="tenantId", visibility=["read"])
|
||||
"""The tenant ID of the system assigned identity. This property will only be provided for a system
|
||||
assigned identity."""
|
||||
type: Union[str, "_models.ManagedServiceIdentityType"] = rest_field()
|
||||
"""The type of managed identity assigned to this resource. Required. Known values are: \"None\",
|
||||
\"SystemAssigned\", \"UserAssigned\", and \"SystemAssigned,UserAssigned\"."""
|
||||
user_assigned_identities: Optional[Dict[str, "_models.UserAssignedIdentity"]] = rest_field(
|
||||
name="userAssignedIdentities"
|
||||
)
|
||||
"""The identities assigned to this resource by the user."""
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
type: Union[str, "_models.ManagedServiceIdentityType"],
|
||||
user_assigned_identities: Optional[Dict[str, "_models.UserAssignedIdentity"]] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class SystemData(_model_base.Model):
|
||||
"""Metadata pertaining to creation and last modification of the resource.
|
||||
|
||||
:ivar created_by: The identity that created the resource.
|
||||
:vartype created_by: str
|
||||
:ivar created_by_type: The type of identity that created the resource. Known values are:
|
||||
"User", "Application", "ManagedIdentity", and "Key".
|
||||
:vartype created_by_type: str or
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.CreatedByType
|
||||
:ivar created_at: The timestamp of resource creation (UTC).
|
||||
:vartype created_at: ~datetime.datetime
|
||||
:ivar last_modified_by: The identity that last modified the resource.
|
||||
:vartype last_modified_by: str
|
||||
:ivar last_modified_by_type: The type of identity that last modified the resource. Known values
|
||||
are: "User", "Application", "ManagedIdentity", and "Key".
|
||||
:vartype last_modified_by_type: str or
|
||||
~azure.resourcemanager.models.commontypes.managedidentity.models.CreatedByType
|
||||
:ivar last_modified_at: The timestamp of resource last modification (UTC).
|
||||
:vartype last_modified_at: ~datetime.datetime
|
||||
"""
|
||||
|
||||
created_by: Optional[str] = rest_field(name="createdBy")
|
||||
"""The identity that created the resource."""
|
||||
created_by_type: Optional[Union[str, "_models.CreatedByType"]] = rest_field(name="createdByType")
|
||||
"""The type of identity that created the resource. Known values are: \"User\", \"Application\",
|
||||
\"ManagedIdentity\", and \"Key\"."""
|
||||
created_at: Optional[datetime.datetime] = rest_field(name="createdAt", format="rfc3339")
|
||||
"""The timestamp of resource creation (UTC)."""
|
||||
last_modified_by: Optional[str] = rest_field(name="lastModifiedBy")
|
||||
"""The identity that last modified the resource."""
|
||||
last_modified_by_type: Optional[Union[str, "_models.CreatedByType"]] = rest_field(name="lastModifiedByType")
|
||||
"""The type of identity that last modified the resource. Known values are: \"User\",
|
||||
\"Application\", \"ManagedIdentity\", and \"Key\"."""
|
||||
last_modified_at: Optional[datetime.datetime] = rest_field(name="lastModifiedAt", format="rfc3339")
|
||||
"""The timestamp of resource last modification (UTC)."""
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
created_by: Optional[str] = None,
|
||||
created_by_type: Optional[Union[str, "_models.CreatedByType"]] = None,
|
||||
created_at: Optional[datetime.datetime] = None,
|
||||
last_modified_by: Optional[str] = None,
|
||||
last_modified_by_type: Optional[Union[str, "_models.CreatedByType"]] = None,
|
||||
last_modified_at: Optional[datetime.datetime] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class UserAssignedIdentity(_model_base.Model):
|
||||
"""User assigned identity properties.
|
||||
|
||||
Readonly variables are only populated by the server, and will be ignored when sending a request.
|
||||
|
||||
:ivar principal_id: The principal ID of the assigned identity.
|
||||
:vartype principal_id: str
|
||||
:ivar client_id: The client ID of the assigned identity.
|
||||
:vartype client_id: str
|
||||
"""
|
||||
|
||||
principal_id: Optional[str] = rest_field(name="principalId", visibility=["read"])
|
||||
"""The principal ID of the assigned identity."""
|
||||
client_id: Optional[str] = rest_field(name="clientId", visibility=["read"])
|
||||
"""The client ID of the assigned identity."""
|
|
@ -0,0 +1,20 @@
|
|||
# ------------------------------------
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
# ------------------------------------
|
||||
"""Customize generated code here.
|
||||
|
||||
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
||||
from typing import List
|
||||
|
||||
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
|
||||
|
||||
|
||||
def patch_sdk():
|
||||
"""Do not remove from this file.
|
||||
|
||||
`patch_sdk` is a last resort escape hatch that allows you to do customizations
|
||||
you can't accomplish using the techniques described in
|
||||
https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
|
@ -0,0 +1,19 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
from ._operations import ManagedIdentityTrackedResourcesOperations
|
||||
|
||||
from ._patch import __all__ as _patch_all
|
||||
from ._patch import * # pylint: disable=unused-wildcard-import
|
||||
from ._patch import patch_sdk as _patch_sdk
|
||||
|
||||
__all__ = [
|
||||
"ManagedIdentityTrackedResourcesOperations",
|
||||
]
|
||||
__all__.extend([p for p in _patch_all if p not in __all__])
|
||||
_patch_sdk()
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,20 @@
|
|||
# ------------------------------------
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
# ------------------------------------
|
||||
"""Customize generated code here.
|
||||
|
||||
Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
||||
from typing import List
|
||||
|
||||
__all__: List[str] = [] # Add all objects you want publicly available to users at this package level
|
||||
|
||||
|
||||
def patch_sdk():
|
||||
"""Do not remove from this file.
|
||||
|
||||
`patch_sdk` is a last resort escape hatch that allows you to do customizations
|
||||
you can't accomplish using the techniques described in
|
||||
https://aka.ms/azsdk/python/dpcodegen/python/customize
|
||||
"""
|
|
@ -0,0 +1 @@
|
|||
# Marker file for PEP 561.
|
|
@ -0,0 +1,5 @@
|
|||
-e ../../../tools/azure-sdk-tools
|
||||
../../core/azure-core
|
||||
../../identity/azure-identity
|
||||
../../core/azure-mgmt-core
|
||||
aiohttp
|
|
@ -0,0 +1,35 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
import os
|
||||
import pytest
|
||||
from dotenv import load_dotenv
|
||||
from devtools_testutils import (
|
||||
test_proxy,
|
||||
add_general_regex_sanitizer,
|
||||
add_body_key_sanitizer,
|
||||
add_header_regex_sanitizer,
|
||||
)
|
||||
|
||||
load_dotenv()
|
||||
|
||||
|
||||
# aovid record sensitive identity information in recordings
|
||||
@pytest.fixture(scope="session", autouse=True)
|
||||
def add_sanitizers(test_proxy):
|
||||
managedidentity_subscription_id = os.environ.get("AZURE_SUBSCRIPTION_ID", "00000000-0000-0000-0000-000000000000")
|
||||
managedidentity_tenant_id = os.environ.get("AZURE_TENANT_ID", "00000000-0000-0000-0000-000000000000")
|
||||
managedidentity_client_id = os.environ.get("AZURE_CLIENT_ID", "00000000-0000-0000-0000-000000000000")
|
||||
managedidentity_client_secret = os.environ.get("AZURE_CLIENT_SECRET", "00000000-0000-0000-0000-000000000000")
|
||||
add_general_regex_sanitizer(regex=managedidentity_subscription_id, value="00000000-0000-0000-0000-000000000000")
|
||||
add_general_regex_sanitizer(regex=managedidentity_tenant_id, value="00000000-0000-0000-0000-000000000000")
|
||||
add_general_regex_sanitizer(regex=managedidentity_client_id, value="00000000-0000-0000-0000-000000000000")
|
||||
add_general_regex_sanitizer(regex=managedidentity_client_secret, value="00000000-0000-0000-0000-000000000000")
|
||||
|
||||
add_header_regex_sanitizer(key="Set-Cookie", value="[set-cookie;]")
|
||||
add_header_regex_sanitizer(key="Cookie", value="cookie;")
|
||||
add_body_key_sanitizer(json_path="$..access_token", value="access_token")
|
|
@ -0,0 +1,96 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
import pytest
|
||||
from azure.resourcemanager.models.commontypes.managedidentity import ManagedIdentityClient
|
||||
|
||||
from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy
|
||||
|
||||
AZURE_LOCATION = "eastus"
|
||||
|
||||
|
||||
@pytest.mark.skip("you may need to update the auto-generated test case before run it")
|
||||
class TestManagedIdentityManagedIdentityTrackedResourcesOperations(AzureMgmtRecordedTestCase):
|
||||
def setup_method(self, method):
|
||||
self.client = self.create_mgmt_client(ManagedIdentityClient)
|
||||
|
||||
@RandomNameResourceGroupPreparer(location=AZURE_LOCATION)
|
||||
@recorded_by_proxy
|
||||
def test_get(self, resource_group):
|
||||
response = self.client.managed_identity_tracked_resources.get(
|
||||
resource_group_name=resource_group.name,
|
||||
managed_identity_tracked_resource_name="str",
|
||||
)
|
||||
|
||||
# please add some check logic here by yourself
|
||||
# ...
|
||||
|
||||
@RandomNameResourceGroupPreparer(location=AZURE_LOCATION)
|
||||
@recorded_by_proxy
|
||||
def test_create_with_system_assigned(self, resource_group):
|
||||
response = self.client.managed_identity_tracked_resources.create_with_system_assigned(
|
||||
resource_group_name=resource_group.name,
|
||||
managed_identity_tracked_resource_name="str",
|
||||
resource={
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {"str": {"clientId": "str", "principalId": "str"}},
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {"provisioningState": "str"},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str",
|
||||
},
|
||||
"tags": {"str": "str"},
|
||||
"type": "str",
|
||||
},
|
||||
)
|
||||
|
||||
# please add some check logic here by yourself
|
||||
# ...
|
||||
|
||||
@RandomNameResourceGroupPreparer(location=AZURE_LOCATION)
|
||||
@recorded_by_proxy
|
||||
def test_update_with_user_assigned_and_system_assigned(self, resource_group):
|
||||
response = self.client.managed_identity_tracked_resources.update_with_user_assigned_and_system_assigned(
|
||||
resource_group_name=resource_group.name,
|
||||
managed_identity_tracked_resource_name="str",
|
||||
properties={
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {"str": {"clientId": "str", "principalId": "str"}},
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {"provisioningState": "str"},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str",
|
||||
},
|
||||
"tags": {"str": "str"},
|
||||
"type": "str",
|
||||
},
|
||||
)
|
||||
|
||||
# please add some check logic here by yourself
|
||||
# ...
|
|
@ -0,0 +1,97 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
import pytest
|
||||
from azure.resourcemanager.models.commontypes.managedidentity.aio import ManagedIdentityClient
|
||||
|
||||
from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer
|
||||
from devtools_testutils.aio import recorded_by_proxy_async
|
||||
|
||||
AZURE_LOCATION = "eastus"
|
||||
|
||||
|
||||
@pytest.mark.skip("you may need to update the auto-generated test case before run it")
|
||||
class TestManagedIdentityManagedIdentityTrackedResourcesOperationsAsync(AzureMgmtRecordedTestCase):
|
||||
def setup_method(self, method):
|
||||
self.client = self.create_mgmt_client(ManagedIdentityClient, is_async=True)
|
||||
|
||||
@RandomNameResourceGroupPreparer(location=AZURE_LOCATION)
|
||||
@recorded_by_proxy_async
|
||||
async def test_get(self, resource_group):
|
||||
response = await self.client.managed_identity_tracked_resources.get(
|
||||
resource_group_name=resource_group.name,
|
||||
managed_identity_tracked_resource_name="str",
|
||||
)
|
||||
|
||||
# please add some check logic here by yourself
|
||||
# ...
|
||||
|
||||
@RandomNameResourceGroupPreparer(location=AZURE_LOCATION)
|
||||
@recorded_by_proxy_async
|
||||
async def test_create_with_system_assigned(self, resource_group):
|
||||
response = await self.client.managed_identity_tracked_resources.create_with_system_assigned(
|
||||
resource_group_name=resource_group.name,
|
||||
managed_identity_tracked_resource_name="str",
|
||||
resource={
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {"str": {"clientId": "str", "principalId": "str"}},
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {"provisioningState": "str"},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str",
|
||||
},
|
||||
"tags": {"str": "str"},
|
||||
"type": "str",
|
||||
},
|
||||
)
|
||||
|
||||
# please add some check logic here by yourself
|
||||
# ...
|
||||
|
||||
@RandomNameResourceGroupPreparer(location=AZURE_LOCATION)
|
||||
@recorded_by_proxy_async
|
||||
async def test_update_with_user_assigned_and_system_assigned(self, resource_group):
|
||||
response = await self.client.managed_identity_tracked_resources.update_with_user_assigned_and_system_assigned(
|
||||
resource_group_name=resource_group.name,
|
||||
managed_identity_tracked_resource_name="str",
|
||||
properties={
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"identity": {
|
||||
"type": "str",
|
||||
"principalId": "str",
|
||||
"tenantId": "str",
|
||||
"userAssignedIdentities": {"str": {"clientId": "str", "principalId": "str"}},
|
||||
},
|
||||
"name": "str",
|
||||
"properties": {"provisioningState": "str"},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str",
|
||||
},
|
||||
"tags": {"str": "str"},
|
||||
"type": "str",
|
||||
},
|
||||
)
|
||||
|
||||
# please add some check logic here by yourself
|
||||
# ...
|
|
@ -0,0 +1,73 @@
|
|||
# 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) Python Code Generator.
|
||||
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
# --------------------------------------------------------------------------
|
||||
# coding: utf-8
|
||||
|
||||
import os
|
||||
import re
|
||||
from setuptools import setup, find_packages
|
||||
|
||||
|
||||
PACKAGE_NAME = "azure-resourcemanager-models-commontypes-managedidentity"
|
||||
PACKAGE_PPRINT_NAME = "Azure Resourcemanager Models Commontypes Managedidentity"
|
||||
|
||||
# a-b-c => a/b/c
|
||||
package_folder_path = PACKAGE_NAME.replace("-", "/")
|
||||
|
||||
# Version extraction inspired from 'requests'
|
||||
with open(os.path.join(package_folder_path, "_version.py"), "r") as fd:
|
||||
version = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]', fd.read(), re.MULTILINE).group(1)
|
||||
|
||||
if not version:
|
||||
raise RuntimeError("Cannot find version information")
|
||||
|
||||
|
||||
setup(
|
||||
name=PACKAGE_NAME,
|
||||
version=version,
|
||||
description="Microsoft {} Client Library for Python".format(PACKAGE_PPRINT_NAME),
|
||||
long_description=open("README.md", "r").read(),
|
||||
long_description_content_type="text/markdown",
|
||||
license="MIT License",
|
||||
author="Microsoft Corporation",
|
||||
author_email="azpysdkhelp@microsoft.com",
|
||||
url="https://github.com/Azure/azure-sdk-for-python/tree/main/sdk",
|
||||
keywords="azure, azure sdk",
|
||||
classifiers=[
|
||||
"Development Status :: 4 - Beta",
|
||||
"Programming Language :: Python",
|
||||
"Programming Language :: Python :: 3 :: Only",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.8",
|
||||
"Programming Language :: Python :: 3.9",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"License :: OSI Approved :: MIT License",
|
||||
],
|
||||
zip_safe=False,
|
||||
packages=find_packages(
|
||||
exclude=[
|
||||
"tests",
|
||||
# Exclude packages that will be covered by PEP420 or nspkg
|
||||
"azure",
|
||||
"azure.resourcemanager",
|
||||
"azure.resourcemanager.models",
|
||||
"azure.resourcemanager.models.commontypes",
|
||||
]
|
||||
),
|
||||
include_package_data=True,
|
||||
package_data={
|
||||
"azure.resourcemanager.models.commontypes.managedidentity": ["py.typed"],
|
||||
},
|
||||
install_requires=[
|
||||
"isodate>=0.6.1",
|
||||
"azure-mgmt-core>=1.3.2",
|
||||
"typing-extensions>=4.6.0",
|
||||
],
|
||||
python_requires=">=3.8",
|
||||
)
|
|
@ -8,14 +8,10 @@
|
|||
"azure.resourcemanager.models.resources.models.ProxyResource": "Azure.ResourceManager.CommonTypes.ProxyResource",
|
||||
"azure.resourcemanager.models.resources.models.NestedProxyResource": "Azure.ResourceManager.Models.Resources.NestedProxyResource",
|
||||
"azure.resourcemanager.models.resources.models.NestedProxyResourceProperties": "Azure.ResourceManager.Models.Resources.NestedProxyResourceProperties",
|
||||
"azure.resourcemanager.models.resources.models.NestedProxyResourceUpdate": "Azure.ResourceManager.Foundations.ResourceUpdateModel",
|
||||
"azure.resourcemanager.models.resources.models.NestedProxyResourceUpdateProperties": "Azure.ResourceManager.Foundations.ResourceUpdateModelProperties",
|
||||
"azure.resourcemanager.models.resources.models.SystemData": "Azure.ResourceManager.CommonTypes.SystemData",
|
||||
"azure.resourcemanager.models.resources.models.TrackedResource": "Azure.ResourceManager.CommonTypes.TrackedResource",
|
||||
"azure.resourcemanager.models.resources.models.TopLevelTrackedResource": "Azure.ResourceManager.Models.Resources.TopLevelTrackedResource",
|
||||
"azure.resourcemanager.models.resources.models.TopLevelTrackedResourceProperties": "Azure.ResourceManager.Models.Resources.TopLevelTrackedResourceProperties",
|
||||
"azure.resourcemanager.models.resources.models.TopLevelTrackedResourceUpdate": "Azure.ResourceManager.Foundations.ResourceUpdateModel",
|
||||
"azure.resourcemanager.models.resources.models.TopLevelTrackedResourceUpdateProperties": "Azure.ResourceManager.Foundations.ResourceUpdateModelProperties",
|
||||
"azure.resourcemanager.models.resources.models.CreatedByType": "Azure.ResourceManager.CommonTypes.createdByType",
|
||||
"azure.resourcemanager.models.resources.models.ProvisioningState": "Azure.ResourceManager.Models.Resources.ProvisioningState",
|
||||
"azure.resourcemanager.models.resources.ResourcesClient.top_level_tracked_resources.get": "Azure.ResourceManager.Models.Resources.TopLevelTrackedResources.get",
|
||||
|
|
|
@ -564,7 +564,7 @@ class TopLevelTrackedResourcesOperations:
|
|||
self,
|
||||
resource_group_name: str,
|
||||
top_level_tracked_resource_name: str,
|
||||
properties: Union[_models.TopLevelTrackedResourceUpdate, JSON, IO[bytes]],
|
||||
properties: Union[_models.TopLevelTrackedResource, JSON, IO[bytes]],
|
||||
**kwargs: Any
|
||||
) -> AsyncIterator[bytes]:
|
||||
error_map: MutableMapping[int, Type[HttpResponseError]] = {
|
||||
|
@ -636,7 +636,7 @@ class TopLevelTrackedResourcesOperations:
|
|||
self,
|
||||
resource_group_name: str,
|
||||
top_level_tracked_resource_name: str,
|
||||
properties: _models.TopLevelTrackedResourceUpdate,
|
||||
properties: _models.TopLevelTrackedResource,
|
||||
*,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
|
@ -649,7 +649,7 @@ class TopLevelTrackedResourcesOperations:
|
|||
:param top_level_tracked_resource_name: arm resource name for path. Required.
|
||||
:type top_level_tracked_resource_name: str
|
||||
:param properties: The resource properties to be updated. Required.
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.TopLevelTrackedResourceUpdate
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.TopLevelTrackedResource
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for JSON body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
|
@ -664,12 +664,25 @@ class TopLevelTrackedResourcesOperations:
|
|||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
properties = {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"description": "str"
|
||||
"description": "str",
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
}
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
|
||||
# response body for status code(s): 200, 202
|
||||
|
@ -811,7 +824,7 @@ class TopLevelTrackedResourcesOperations:
|
|||
self,
|
||||
resource_group_name: str,
|
||||
top_level_tracked_resource_name: str,
|
||||
properties: Union[_models.TopLevelTrackedResourceUpdate, JSON, IO[bytes]],
|
||||
properties: Union[_models.TopLevelTrackedResource, JSON, IO[bytes]],
|
||||
**kwargs: Any
|
||||
) -> AsyncLROPoller[_models.TopLevelTrackedResource]:
|
||||
"""Update a TopLevelTrackedResource.
|
||||
|
@ -822,9 +835,9 @@ class TopLevelTrackedResourcesOperations:
|
|||
:param top_level_tracked_resource_name: arm resource name for path. Required.
|
||||
:type top_level_tracked_resource_name: str
|
||||
:param properties: The resource properties to be updated. Is one of the following types:
|
||||
TopLevelTrackedResourceUpdate, JSON, IO[bytes] Required.
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.TopLevelTrackedResourceUpdate
|
||||
or JSON or IO[bytes]
|
||||
TopLevelTrackedResource, JSON, IO[bytes] Required.
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.TopLevelTrackedResource or
|
||||
JSON or IO[bytes]
|
||||
:return: An instance of AsyncLROPoller that returns TopLevelTrackedResource. The
|
||||
TopLevelTrackedResource is compatible with MutableMapping
|
||||
:rtype:
|
||||
|
@ -836,12 +849,25 @@ class TopLevelTrackedResourcesOperations:
|
|||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
properties = {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"description": "str"
|
||||
"description": "str",
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
}
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
|
||||
# response body for status code(s): 200, 202
|
||||
|
@ -1720,7 +1746,7 @@ class NestedProxyResourcesOperations:
|
|||
resource_group_name: str,
|
||||
top_level_tracked_resource_name: str,
|
||||
nexted_proxy_resource_name: str,
|
||||
properties: Union[_models.NestedProxyResourceUpdate, JSON, IO[bytes]],
|
||||
properties: Union[_models.NestedProxyResource, JSON, IO[bytes]],
|
||||
**kwargs: Any
|
||||
) -> AsyncIterator[bytes]:
|
||||
error_map: MutableMapping[int, Type[HttpResponseError]] = {
|
||||
|
@ -1794,7 +1820,7 @@ class NestedProxyResourcesOperations:
|
|||
resource_group_name: str,
|
||||
top_level_tracked_resource_name: str,
|
||||
nexted_proxy_resource_name: str,
|
||||
properties: _models.NestedProxyResourceUpdate,
|
||||
properties: _models.NestedProxyResource,
|
||||
*,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
|
@ -1809,7 +1835,7 @@ class NestedProxyResourcesOperations:
|
|||
:param nexted_proxy_resource_name: Name of the nested resource. Required.
|
||||
:type nexted_proxy_resource_name: str
|
||||
:param properties: The resource properties to be updated. Required.
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.NestedProxyResourceUpdate
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.NestedProxyResource
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for JSON body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
|
@ -1824,9 +1850,21 @@ class NestedProxyResourcesOperations:
|
|||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
properties = {
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"description": "str"
|
||||
}
|
||||
"description": "str",
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
|
||||
# response body for status code(s): 200, 202
|
||||
|
@ -1963,7 +2001,7 @@ class NestedProxyResourcesOperations:
|
|||
resource_group_name: str,
|
||||
top_level_tracked_resource_name: str,
|
||||
nexted_proxy_resource_name: str,
|
||||
properties: Union[_models.NestedProxyResourceUpdate, JSON, IO[bytes]],
|
||||
properties: Union[_models.NestedProxyResource, JSON, IO[bytes]],
|
||||
**kwargs: Any
|
||||
) -> AsyncLROPoller[_models.NestedProxyResource]:
|
||||
"""Update a NestedProxyResource.
|
||||
|
@ -1976,9 +2014,9 @@ class NestedProxyResourcesOperations:
|
|||
:param nexted_proxy_resource_name: Name of the nested resource. Required.
|
||||
:type nexted_proxy_resource_name: str
|
||||
:param properties: The resource properties to be updated. Is one of the following types:
|
||||
NestedProxyResourceUpdate, JSON, IO[bytes] Required.
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.NestedProxyResourceUpdate or
|
||||
JSON or IO[bytes]
|
||||
NestedProxyResource, JSON, IO[bytes] Required.
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.NestedProxyResource or JSON or
|
||||
IO[bytes]
|
||||
:return: An instance of AsyncLROPoller that returns NestedProxyResource. The
|
||||
NestedProxyResource is compatible with MutableMapping
|
||||
:rtype:
|
||||
|
@ -1990,9 +2028,21 @@ class NestedProxyResourcesOperations:
|
|||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
properties = {
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"description": "str"
|
||||
}
|
||||
"description": "str",
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
|
||||
# response body for status code(s): 200, 202
|
||||
|
|
|
@ -11,15 +11,11 @@ from ._models import ErrorDetail
|
|||
from ._models import ErrorResponse
|
||||
from ._models import NestedProxyResource
|
||||
from ._models import NestedProxyResourceProperties
|
||||
from ._models import NestedProxyResourceUpdate
|
||||
from ._models import NestedProxyResourceUpdateProperties
|
||||
from ._models import ProxyResource
|
||||
from ._models import Resource
|
||||
from ._models import SystemData
|
||||
from ._models import TopLevelTrackedResource
|
||||
from ._models import TopLevelTrackedResourceProperties
|
||||
from ._models import TopLevelTrackedResourceUpdate
|
||||
from ._models import TopLevelTrackedResourceUpdateProperties
|
||||
from ._models import TrackedResource
|
||||
|
||||
from ._enums import CreatedByType
|
||||
|
@ -34,15 +30,11 @@ __all__ = [
|
|||
"ErrorResponse",
|
||||
"NestedProxyResource",
|
||||
"NestedProxyResourceProperties",
|
||||
"NestedProxyResourceUpdate",
|
||||
"NestedProxyResourceUpdateProperties",
|
||||
"ProxyResource",
|
||||
"Resource",
|
||||
"SystemData",
|
||||
"TopLevelTrackedResource",
|
||||
"TopLevelTrackedResourceProperties",
|
||||
"TopLevelTrackedResourceUpdate",
|
||||
"TopLevelTrackedResourceUpdateProperties",
|
||||
"TrackedResource",
|
||||
"CreatedByType",
|
||||
"ProvisioningState",
|
||||
|
|
|
@ -227,62 +227,6 @@ class NestedProxyResourceProperties(_model_base.Model):
|
|||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class NestedProxyResourceUpdate(_model_base.Model):
|
||||
"""The type used for update operations of the NestedProxyResource.
|
||||
|
||||
:ivar properties:
|
||||
:vartype properties:
|
||||
~azure.resourcemanager.models.resources.models.NestedProxyResourceUpdateProperties
|
||||
"""
|
||||
|
||||
properties: Optional["_models.NestedProxyResourceUpdateProperties"] = rest_field()
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
properties: Optional["_models.NestedProxyResourceUpdateProperties"] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class NestedProxyResourceUpdateProperties(_model_base.Model):
|
||||
"""The updatable properties of the NestedProxyResource.
|
||||
|
||||
:ivar description: Nested resource description.
|
||||
:vartype description: str
|
||||
"""
|
||||
|
||||
description: Optional[str] = rest_field()
|
||||
"""Nested resource description."""
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
description: Optional[str] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class SystemData(_model_base.Model):
|
||||
"""Metadata pertaining to creation and last modification of the resource.
|
||||
|
||||
|
@ -478,64 +422,3 @@ class TopLevelTrackedResourceProperties(_model_base.Model):
|
|||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class TopLevelTrackedResourceUpdate(_model_base.Model):
|
||||
"""The type used for update operations of the TopLevelTrackedResource.
|
||||
|
||||
:ivar tags: Resource tags.
|
||||
:vartype tags: dict[str, str]
|
||||
:ivar properties:
|
||||
:vartype properties:
|
||||
~azure.resourcemanager.models.resources.models.TopLevelTrackedResourceUpdateProperties
|
||||
"""
|
||||
|
||||
tags: Optional[Dict[str, str]] = rest_field()
|
||||
"""Resource tags."""
|
||||
properties: Optional["_models.TopLevelTrackedResourceUpdateProperties"] = rest_field()
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
tags: Optional[Dict[str, str]] = None,
|
||||
properties: Optional["_models.TopLevelTrackedResourceUpdateProperties"] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
|
||||
class TopLevelTrackedResourceUpdateProperties(_model_base.Model):
|
||||
"""The updatable properties of the TopLevelTrackedResource.
|
||||
|
||||
:ivar description: The description of the resource.
|
||||
:vartype description: str
|
||||
"""
|
||||
|
||||
description: Optional[str] = rest_field()
|
||||
"""The description of the resource."""
|
||||
|
||||
@overload
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
description: Optional[str] = None,
|
||||
): ...
|
||||
|
||||
@overload
|
||||
def __init__(self, mapping: Mapping[str, Any]):
|
||||
"""
|
||||
:param mapping: raw JSON to initialize the model.
|
||||
:type mapping: Mapping[str, Any]
|
||||
"""
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None: # pylint: disable=useless-super-delegation
|
||||
super().__init__(*args, **kwargs)
|
||||
|
|
|
@ -895,7 +895,7 @@ class TopLevelTrackedResourcesOperations:
|
|||
self,
|
||||
resource_group_name: str,
|
||||
top_level_tracked_resource_name: str,
|
||||
properties: Union[_models.TopLevelTrackedResourceUpdate, JSON, IO[bytes]],
|
||||
properties: Union[_models.TopLevelTrackedResource, JSON, IO[bytes]],
|
||||
**kwargs: Any
|
||||
) -> Iterator[bytes]:
|
||||
error_map: MutableMapping[int, Type[HttpResponseError]] = {
|
||||
|
@ -967,7 +967,7 @@ class TopLevelTrackedResourcesOperations:
|
|||
self,
|
||||
resource_group_name: str,
|
||||
top_level_tracked_resource_name: str,
|
||||
properties: _models.TopLevelTrackedResourceUpdate,
|
||||
properties: _models.TopLevelTrackedResource,
|
||||
*,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
|
@ -980,7 +980,7 @@ class TopLevelTrackedResourcesOperations:
|
|||
:param top_level_tracked_resource_name: arm resource name for path. Required.
|
||||
:type top_level_tracked_resource_name: str
|
||||
:param properties: The resource properties to be updated. Required.
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.TopLevelTrackedResourceUpdate
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.TopLevelTrackedResource
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for JSON body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
|
@ -995,12 +995,25 @@ class TopLevelTrackedResourcesOperations:
|
|||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
properties = {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"description": "str"
|
||||
"description": "str",
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
}
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
|
||||
# response body for status code(s): 200, 202
|
||||
|
@ -1142,7 +1155,7 @@ class TopLevelTrackedResourcesOperations:
|
|||
self,
|
||||
resource_group_name: str,
|
||||
top_level_tracked_resource_name: str,
|
||||
properties: Union[_models.TopLevelTrackedResourceUpdate, JSON, IO[bytes]],
|
||||
properties: Union[_models.TopLevelTrackedResource, JSON, IO[bytes]],
|
||||
**kwargs: Any
|
||||
) -> LROPoller[_models.TopLevelTrackedResource]:
|
||||
"""Update a TopLevelTrackedResource.
|
||||
|
@ -1153,9 +1166,9 @@ class TopLevelTrackedResourcesOperations:
|
|||
:param top_level_tracked_resource_name: arm resource name for path. Required.
|
||||
:type top_level_tracked_resource_name: str
|
||||
:param properties: The resource properties to be updated. Is one of the following types:
|
||||
TopLevelTrackedResourceUpdate, JSON, IO[bytes] Required.
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.TopLevelTrackedResourceUpdate
|
||||
or JSON or IO[bytes]
|
||||
TopLevelTrackedResource, JSON, IO[bytes] Required.
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.TopLevelTrackedResource or
|
||||
JSON or IO[bytes]
|
||||
:return: An instance of LROPoller that returns TopLevelTrackedResource. The
|
||||
TopLevelTrackedResource is compatible with MutableMapping
|
||||
:rtype:
|
||||
|
@ -1167,12 +1180,25 @@ class TopLevelTrackedResourcesOperations:
|
|||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
properties = {
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"description": "str"
|
||||
"description": "str",
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"tags": {
|
||||
"str": "str"
|
||||
}
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
|
||||
# response body for status code(s): 200, 202
|
||||
|
@ -2051,7 +2077,7 @@ class NestedProxyResourcesOperations:
|
|||
resource_group_name: str,
|
||||
top_level_tracked_resource_name: str,
|
||||
nexted_proxy_resource_name: str,
|
||||
properties: Union[_models.NestedProxyResourceUpdate, JSON, IO[bytes]],
|
||||
properties: Union[_models.NestedProxyResource, JSON, IO[bytes]],
|
||||
**kwargs: Any
|
||||
) -> Iterator[bytes]:
|
||||
error_map: MutableMapping[int, Type[HttpResponseError]] = {
|
||||
|
@ -2125,7 +2151,7 @@ class NestedProxyResourcesOperations:
|
|||
resource_group_name: str,
|
||||
top_level_tracked_resource_name: str,
|
||||
nexted_proxy_resource_name: str,
|
||||
properties: _models.NestedProxyResourceUpdate,
|
||||
properties: _models.NestedProxyResource,
|
||||
*,
|
||||
content_type: str = "application/json",
|
||||
**kwargs: Any
|
||||
|
@ -2140,7 +2166,7 @@ class NestedProxyResourcesOperations:
|
|||
:param nexted_proxy_resource_name: Name of the nested resource. Required.
|
||||
:type nexted_proxy_resource_name: str
|
||||
:param properties: The resource properties to be updated. Required.
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.NestedProxyResourceUpdate
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.NestedProxyResource
|
||||
:keyword content_type: Body Parameter content-type. Content type parameter for JSON body.
|
||||
Default value is "application/json".
|
||||
:paramtype content_type: str
|
||||
|
@ -2155,9 +2181,21 @@ class NestedProxyResourcesOperations:
|
|||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
properties = {
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"description": "str"
|
||||
}
|
||||
"description": "str",
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
|
||||
# response body for status code(s): 200, 202
|
||||
|
@ -2294,7 +2332,7 @@ class NestedProxyResourcesOperations:
|
|||
resource_group_name: str,
|
||||
top_level_tracked_resource_name: str,
|
||||
nexted_proxy_resource_name: str,
|
||||
properties: Union[_models.NestedProxyResourceUpdate, JSON, IO[bytes]],
|
||||
properties: Union[_models.NestedProxyResource, JSON, IO[bytes]],
|
||||
**kwargs: Any
|
||||
) -> LROPoller[_models.NestedProxyResource]:
|
||||
"""Update a NestedProxyResource.
|
||||
|
@ -2307,9 +2345,9 @@ class NestedProxyResourcesOperations:
|
|||
:param nexted_proxy_resource_name: Name of the nested resource. Required.
|
||||
:type nexted_proxy_resource_name: str
|
||||
:param properties: The resource properties to be updated. Is one of the following types:
|
||||
NestedProxyResourceUpdate, JSON, IO[bytes] Required.
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.NestedProxyResourceUpdate or
|
||||
JSON or IO[bytes]
|
||||
NestedProxyResource, JSON, IO[bytes] Required.
|
||||
:type properties: ~azure.resourcemanager.models.resources.models.NestedProxyResource or JSON or
|
||||
IO[bytes]
|
||||
:return: An instance of LROPoller that returns NestedProxyResource. The NestedProxyResource is
|
||||
compatible with MutableMapping
|
||||
:rtype:
|
||||
|
@ -2321,9 +2359,21 @@ class NestedProxyResourcesOperations:
|
|||
|
||||
# JSON input template you can fill out and use as your body input.
|
||||
properties = {
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"properties": {
|
||||
"description": "str"
|
||||
}
|
||||
"description": "str",
|
||||
"provisioningState": "str"
|
||||
},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str"
|
||||
},
|
||||
"type": "str"
|
||||
}
|
||||
|
||||
# response body for status code(s): 200, 202
|
||||
|
|
|
@ -63,7 +63,20 @@ class TestResourcesNestedProxyResourcesOperations(AzureMgmtRecordedTestCase):
|
|||
resource_group_name=resource_group.name,
|
||||
top_level_tracked_resource_name="str",
|
||||
nexted_proxy_resource_name="str",
|
||||
properties={"properties": {"description": "str"}},
|
||||
properties={
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"properties": {"description": "str", "provisioningState": "str"},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str",
|
||||
},
|
||||
"type": "str",
|
||||
},
|
||||
).result() # call '.result()' to poll until service return final result
|
||||
|
||||
# please add some check logic here by yourself
|
||||
|
|
|
@ -67,7 +67,20 @@ class TestResourcesNestedProxyResourcesOperationsAsync(AzureMgmtRecordedTestCase
|
|||
resource_group_name=resource_group.name,
|
||||
top_level_tracked_resource_name="str",
|
||||
nexted_proxy_resource_name="str",
|
||||
properties={"properties": {"description": "str"}},
|
||||
properties={
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"properties": {"description": "str", "provisioningState": "str"},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str",
|
||||
},
|
||||
"type": "str",
|
||||
},
|
||||
)
|
||||
).result() # call '.result()' to poll until service return final result
|
||||
|
||||
|
|
|
@ -62,7 +62,22 @@ class TestResourcesTopLevelTrackedResourcesOperations(AzureMgmtRecordedTestCase)
|
|||
response = self.client.top_level_tracked_resources.begin_update(
|
||||
resource_group_name=resource_group.name,
|
||||
top_level_tracked_resource_name="str",
|
||||
properties={"properties": {"description": "str"}, "tags": {"str": "str"}},
|
||||
properties={
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"properties": {"description": "str", "provisioningState": "str"},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str",
|
||||
},
|
||||
"tags": {"str": "str"},
|
||||
"type": "str",
|
||||
},
|
||||
).result() # call '.result()' to poll until service return final result
|
||||
|
||||
# please add some check logic here by yourself
|
||||
|
|
|
@ -66,7 +66,22 @@ class TestResourcesTopLevelTrackedResourcesOperationsAsync(AzureMgmtRecordedTest
|
|||
await self.client.top_level_tracked_resources.begin_update(
|
||||
resource_group_name=resource_group.name,
|
||||
top_level_tracked_resource_name="str",
|
||||
properties={"properties": {"description": "str"}, "tags": {"str": "str"}},
|
||||
properties={
|
||||
"location": "str",
|
||||
"id": "str",
|
||||
"name": "str",
|
||||
"properties": {"description": "str", "provisioningState": "str"},
|
||||
"systemData": {
|
||||
"createdAt": "2020-02-20 00:00:00",
|
||||
"createdBy": "str",
|
||||
"createdByType": "str",
|
||||
"lastModifiedAt": "2020-02-20 00:00:00",
|
||||
"lastModifiedBy": "str",
|
||||
"lastModifiedByType": "str",
|
||||
},
|
||||
"tags": {"str": "str"},
|
||||
"type": "str",
|
||||
},
|
||||
)
|
||||
).result() # call '.result()' to poll until service return final result
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ def build_xms_client_request_id_get_request(**kwargs: Any) -> HttpRequest:
|
|||
_headers = case_insensitive_dict(kwargs.pop("headers", {}) or {})
|
||||
|
||||
# Construct URL
|
||||
_url = "/azure/special-headers/x-ms-client-request-id"
|
||||
_url = "/azure/special-headers/x-ms-client-request-id/"
|
||||
|
||||
# Construct headers
|
||||
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче