* bump tsp 0.58.0

* inv

* changelog
This commit is contained in:
Yuchao Yan 2024-07-19 02:21:53 +08:00 коммит произвёл GitHub
Родитель 410e989cd6
Коммит 1d654f40e7
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
166 изменённых файлов: 17707 добавлений и 576 удалений

Просмотреть файл

@ -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,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

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше