py2docfx 0.1.11.dev1987375__py3-none-any.whl → 0.1.11.dev1989123__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- py2docfx/__main__.py +1 -1
- py2docfx/convert_prepare/generate_document.py +3 -3
- py2docfx/convert_prepare/sphinx_caller.py +23 -5
- py2docfx/convert_prepare/tests/test_generate_document.py +4 -2
- py2docfx/convert_prepare/tests/test_sphinx_caller.py +4 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/authorization_code.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azd_cli.py +20 -14
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azure_arc.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azure_cli.py +36 -14
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azure_powershell.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/chained.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/default.py +4 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/imds.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/managed_identity.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/__init__.py +2 -0
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/auth_code_redirect_handler.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/decorators.py +15 -7
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/interactive.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/managed_identity_client.py +0 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/msal_client.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/msal_managed_identity_client.py +2 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/shared_token_cache.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/utils.py +17 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/_version.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azd_cli.py +14 -11
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_cli.py +30 -12
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/default.py +2 -2
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/imds.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/managed_identity.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_internal/decorators.py +15 -7
- py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_internal/managed_identity_client.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/__about__.py +1 -1
- {py2docfx-0.1.11.dev1987375.dist-info → py2docfx-0.1.11.dev1989123.dist-info}/METADATA +1 -1
- {py2docfx-0.1.11.dev1987375.dist-info → py2docfx-0.1.11.dev1989123.dist-info}/RECORD +36 -36
- {py2docfx-0.1.11.dev1987375.dist-info → py2docfx-0.1.11.dev1989123.dist-info}/WHEEL +0 -0
- {py2docfx-0.1.11.dev1987375.dist-info → py2docfx-0.1.11.dev1989123.dist-info}/top_level.txt +0 -0
py2docfx/__main__.py
CHANGED
@@ -49,7 +49,7 @@ async def donwload_package_generate_documents(
|
|
49
49
|
py2docfx_logger.error(msg)
|
50
50
|
raise
|
51
51
|
|
52
|
-
generate_document(package, output_root,
|
52
|
+
await generate_document(package, output_root,
|
53
53
|
py2docfxEnvironment.get_base_venv_sphinx_build_path(),
|
54
54
|
py2docfxEnvironment.get_venv_package_path(idx),
|
55
55
|
py2docfxEnvironment.get_base_venv_exe())
|
@@ -10,7 +10,7 @@ from py2docfx.convert_prepare.subpackage import merge_subpackage_files
|
|
10
10
|
|
11
11
|
CONF_TEMPLATE_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "conf_templates")
|
12
12
|
|
13
|
-
def generate_document(pkg: PackageInfo, output_root: str | os.PathLike, sphinx_build_path: str, extra_package_path: str, executable=sys.executable):
|
13
|
+
async def generate_document(pkg: PackageInfo, output_root: str | os.PathLike, sphinx_build_path: str, extra_package_path: str, executable=sys.executable):
|
14
14
|
py2docfx_logger = get_package_logger(__name__, pkg.name)
|
15
15
|
# Copy manual written RST from target doc repo
|
16
16
|
package_paths = pkg.path
|
@@ -45,7 +45,7 @@ def generate_document(pkg: PackageInfo, output_root: str | os.PathLike, sphinx_b
|
|
45
45
|
py2docfx_logger.info(msg)
|
46
46
|
|
47
47
|
generate_conf(pkg, package_paths.doc_folder, CONF_TEMPLATE_DIR)
|
48
|
-
run_converter(pkg.name, package_paths.doc_folder, package_paths.yaml_output_folder, sphinx_build_path, extra_package_path, executable=executable)
|
48
|
+
await run_converter(pkg.name, package_paths.doc_folder, package_paths.yaml_output_folder, sphinx_build_path, extra_package_path, executable=executable)
|
49
49
|
|
50
50
|
subpackages_path_record = {}
|
51
51
|
if pkg.build_in_subpackage:
|
@@ -53,6 +53,6 @@ def generate_document(pkg: PackageInfo, output_root: str | os.PathLike, sphinx_b
|
|
53
53
|
for (subpackage_name, subpackage_path) in subpackages_rst_record.items():
|
54
54
|
subpackage_yaml_path = os.path.join(subpackages_yaml_path, subpackage_name)
|
55
55
|
subpackages_path_record[subpackage_name] = subpackage_yaml_path
|
56
|
-
run_converter(pkg.name, subpackage_path, subpackage_yaml_path, sphinx_build_path, extra_package_path, executable=executable)
|
56
|
+
await run_converter(pkg.name, subpackage_path, subpackage_yaml_path, sphinx_build_path, extra_package_path, executable=executable)
|
57
57
|
|
58
58
|
merge_subpackage_files(subpackages_path_record, package_paths.yaml_output_folder, pkg.name)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import asyncio
|
1
2
|
import os
|
2
3
|
import subprocess
|
3
4
|
import sys
|
@@ -49,7 +50,7 @@ def run_apidoc(package_name, rst_path, source_code_path, exclude_paths, package_
|
|
49
50
|
return subpackages_rst_record
|
50
51
|
|
51
52
|
|
52
|
-
def run_converter(package_name: str,
|
53
|
+
async def run_converter(package_name: str,
|
53
54
|
rst_path,
|
54
55
|
out_path,
|
55
56
|
sphinx_build_path: str,
|
@@ -75,7 +76,7 @@ def run_converter(package_name: str,
|
|
75
76
|
py2docfx_logger.error(msg)
|
76
77
|
raise ValueError()
|
77
78
|
sphinx_param = [
|
78
|
-
executable,
|
79
|
+
# executable,
|
79
80
|
sphinx_build_path,
|
80
81
|
rst_path,
|
81
82
|
outdir,
|
@@ -92,8 +93,25 @@ def run_converter(package_name: str,
|
|
92
93
|
env_tmp["PYTHONPATH"] = f"{extra_package_path};{package_root_parent};"
|
93
94
|
else:
|
94
95
|
env_tmp["PYTHONPATH"] = f"{extra_package_path}:{package_root_parent}:"
|
95
|
-
|
96
|
-
|
97
|
-
|
96
|
+
|
97
|
+
proc = await asyncio.create_subprocess_exec(
|
98
|
+
executable, *sphinx_param,
|
99
|
+
cwd=PACKAGE_ROOT,
|
100
|
+
env=env_tmp,
|
101
|
+
stdout=asyncio.subprocess.PIPE,
|
102
|
+
stderr=asyncio.subprocess.PIPE
|
103
|
+
)
|
104
|
+
stdout, stderr = await proc.communicate()
|
105
|
+
return_code = proc.returncode
|
106
|
+
|
107
|
+
if return_code == 0:
|
108
|
+
py2docfx_logger.info(f"{stdout}")
|
109
|
+
py2docfx_logger.info(f"{stderr}")
|
110
|
+
else:
|
111
|
+
py2docfx_logger.error(f"{stderr}")
|
112
|
+
raise subprocess.CalledProcessError(return_code, sphinx_param, stdout, stderr)
|
113
|
+
|
114
|
+
# output = subprocess.run(sphinx_param, check=False, cwd=PACKAGE_ROOT, env=env_tmp, capture_output=True ,text=True)
|
115
|
+
# log_subprocess_ouput(output, py2docfx_logger)
|
98
116
|
|
99
117
|
return outdir
|
@@ -4,6 +4,7 @@ Test the generate_document function.
|
|
4
4
|
import os
|
5
5
|
import sys
|
6
6
|
import shutil
|
7
|
+
import pytest
|
7
8
|
import sphinx
|
8
9
|
import sphinx.cmd.build
|
9
10
|
|
@@ -11,7 +12,8 @@ from py2docfx.convert_prepare.generate_document import generate_document
|
|
11
12
|
from py2docfx.convert_prepare.package_info import PackageInfo
|
12
13
|
from py2docfx.convert_prepare.source import Source
|
13
14
|
|
14
|
-
|
15
|
+
@pytest.mark.asyncio
|
16
|
+
async def test_generate_document(tmp_path):
|
15
17
|
"""
|
16
18
|
Test the generate_document function.
|
17
19
|
"""
|
@@ -42,7 +44,7 @@ def test_generate_document(tmp_path):
|
|
42
44
|
|
43
45
|
# call the function
|
44
46
|
|
45
|
-
generate_document(package, output_root, sphinx_build_path = sphinx.cmd.build.__file__, extra_package_path = source_folder)
|
47
|
+
await generate_document(package, output_root, sphinx_build_path = sphinx.cmd.build.__file__, extra_package_path = source_folder)
|
46
48
|
|
47
49
|
#assert the result
|
48
50
|
yaml_path = os.path.join(yaml_output_folder, "_build", "docfx_yaml")
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import os
|
2
2
|
import shutil
|
3
|
+
import pytest
|
3
4
|
import sphinx
|
4
5
|
import sphinx.cmd.build
|
5
6
|
|
@@ -34,8 +35,8 @@ def test_run_apidoc(tmp_path):
|
|
34
35
|
assert "testcode.fakemodule.rst" in rst_list
|
35
36
|
assert "testcode.exclude.rst" not in rst_list
|
36
37
|
|
37
|
-
|
38
|
-
def test_run_converter(tmp_path):
|
38
|
+
@pytest.mark.asyncio
|
39
|
+
async def test_run_converter(tmp_path):
|
39
40
|
rst_path, source_code_path = init_paths(tmp_path)
|
40
41
|
package_name = "testcode"
|
41
42
|
run_apidoc(package_name, rst_path, source_code_path, package_info.get_exluded_command(), package_info)
|
@@ -50,7 +51,7 @@ def test_run_converter(tmp_path):
|
|
50
51
|
index_rst.write("")
|
51
52
|
|
52
53
|
out_path = os.path.join(tmp_path, "out")
|
53
|
-
out_path = run_converter(package_name, rst_path, out_path, sphinx_build_path = sphinx.cmd.build.__file__, extra_package_path = source_code_path, conf_path=rst_path)
|
54
|
+
out_path = await run_converter(package_name, rst_path, out_path, sphinx_build_path = sphinx.cmd.build.__file__, extra_package_path = source_code_path, conf_path=rst_path)
|
54
55
|
|
55
56
|
if os.path.exists(out_path):
|
56
57
|
yaml_list = os.listdir(os.path.join(out_path, "docfx_yaml"))
|
@@ -85,7 +85,7 @@ class AuthorizationCodeCredential(GetTokenMixin):
|
|
85
85
|
attribute gives a reason. Any error response from Microsoft Entra ID is available as the error's
|
86
86
|
``response`` attribute.
|
87
87
|
"""
|
88
|
-
|
88
|
+
|
89
89
|
return super(AuthorizationCodeCredential, self).get_token(
|
90
90
|
*scopes, claims=claims, tenant_id=tenant_id, client_secret=self._client_secret, **kwargs
|
91
91
|
)
|
@@ -5,6 +5,7 @@
|
|
5
5
|
|
6
6
|
from datetime import datetime
|
7
7
|
import json
|
8
|
+
import logging
|
8
9
|
import os
|
9
10
|
import re
|
10
11
|
import shutil
|
@@ -19,12 +20,15 @@ from .. import CredentialUnavailableError
|
|
19
20
|
from .._internal import resolve_tenant, within_dac, validate_tenant_id, validate_scope
|
20
21
|
from .._internal.decorators import log_get_token
|
21
22
|
|
23
|
+
|
24
|
+
_LOGGER = logging.getLogger(__name__)
|
25
|
+
|
22
26
|
CLI_NOT_FOUND = (
|
23
27
|
"Azure Developer CLI could not be found. "
|
24
28
|
"Please visit https://aka.ms/azure-dev for installation instructions and then,"
|
25
29
|
"once installed, authenticate to your Azure account using 'azd auth login'."
|
26
30
|
)
|
27
|
-
COMMAND_LINE = "
|
31
|
+
COMMAND_LINE = ["auth", "token", "--output", "json"]
|
28
32
|
EXECUTABLE_NAME = "azd"
|
29
33
|
NOT_LOGGED_IN = "Please run 'azd auth login' from a command prompt to authenticate before using this credential."
|
30
34
|
|
@@ -160,8 +164,9 @@ class AzureDeveloperCliCredential:
|
|
160
164
|
for scope in scopes:
|
161
165
|
validate_scope(scope)
|
162
166
|
|
163
|
-
|
164
|
-
|
167
|
+
command_args = COMMAND_LINE.copy()
|
168
|
+
for scope in scopes:
|
169
|
+
command_args += ["--scope", scope]
|
165
170
|
tenant = resolve_tenant(
|
166
171
|
default_tenant=self.tenant_id,
|
167
172
|
tenant_id=tenant_id,
|
@@ -169,8 +174,8 @@ class AzureDeveloperCliCredential:
|
|
169
174
|
**kwargs,
|
170
175
|
)
|
171
176
|
if tenant:
|
172
|
-
|
173
|
-
output = _run_command(
|
177
|
+
command_args += ["--tenant-id", tenant]
|
178
|
+
output = _run_command(command_args, self._process_timeout)
|
174
179
|
|
175
180
|
token = parse_token(output)
|
176
181
|
if not token:
|
@@ -236,15 +241,13 @@ def sanitize_output(output: str) -> str:
|
|
236
241
|
return re.sub(r"\"token\": \"(.*?)(\"|$)", "****", output)
|
237
242
|
|
238
243
|
|
239
|
-
def _run_command(
|
244
|
+
def _run_command(command_args: List[str], timeout: int) -> str:
|
240
245
|
# Ensure executable exists in PATH first. This avoids a subprocess call that would fail anyway.
|
241
|
-
|
246
|
+
azd_path = shutil.which(EXECUTABLE_NAME)
|
247
|
+
if not azd_path:
|
242
248
|
raise CredentialUnavailableError(message=CLI_NOT_FOUND)
|
243
249
|
|
244
|
-
|
245
|
-
args = ["cmd", "/c", command]
|
246
|
-
else:
|
247
|
-
args = ["/bin/sh", "-c", command]
|
250
|
+
args = [azd_path] + command_args
|
248
251
|
try:
|
249
252
|
working_directory = get_safe_working_dir()
|
250
253
|
|
@@ -257,13 +260,16 @@ def _run_command(command: str, timeout: int) -> str:
|
|
257
260
|
"timeout": timeout,
|
258
261
|
}
|
259
262
|
|
263
|
+
_LOGGER.debug("Executing subprocess with the following arguments %s", args)
|
260
264
|
return subprocess.check_output(args, **kwargs)
|
261
265
|
except subprocess.CalledProcessError as ex:
|
262
266
|
# non-zero return from shell
|
263
267
|
# Fallback check in case the executable is not found while executing subprocess.
|
264
|
-
if ex.returncode == 127 or ex.stderr.startswith("'azd' is not recognized"):
|
268
|
+
if ex.returncode == 127 or (ex.stderr is not None and ex.stderr.startswith("'azd' is not recognized")):
|
265
269
|
raise CredentialUnavailableError(message=CLI_NOT_FOUND) from ex
|
266
|
-
if
|
270
|
+
if ex.stderr is not None and (
|
271
|
+
"not logged in, run `azd auth login` to login" in ex.stderr and "AADSTS" not in ex.stderr
|
272
|
+
):
|
267
273
|
raise CredentialUnavailableError(message=NOT_LOGGED_IN) from ex
|
268
274
|
|
269
275
|
# return code is from the CLI -> propagate its output
|
@@ -278,7 +284,7 @@ def _run_command(command: str, timeout: int) -> str:
|
|
278
284
|
# failed to execute 'cmd' or '/bin/sh'
|
279
285
|
error = CredentialUnavailableError(message="Failed to execute '{}'".format(args[0]))
|
280
286
|
raise error from ex
|
281
|
-
except Exception as ex:
|
287
|
+
except Exception as ex:
|
282
288
|
# could be a timeout, for example
|
283
289
|
error = CredentialUnavailableError(message="Failed to invoke the Azure Developer CLI")
|
284
290
|
raise error from ex
|
@@ -54,7 +54,7 @@ def _get_secret_key(response: PipelineResponse) -> str:
|
|
54
54
|
with open(key_file, "r", encoding="utf-8") as file:
|
55
55
|
try:
|
56
56
|
return file.read()
|
57
|
-
except Exception as error:
|
57
|
+
except Exception as error:
|
58
58
|
# user is expected to have obtained read permission prior to this being called
|
59
59
|
raise ClientAuthenticationError(
|
60
60
|
message="Could not read file {} contents: {}".format(key_file, error)
|
@@ -6,6 +6,7 @@ from datetime import datetime
|
|
6
6
|
import json
|
7
7
|
import os
|
8
8
|
import re
|
9
|
+
import logging
|
9
10
|
import shutil
|
10
11
|
import subprocess
|
11
12
|
import sys
|
@@ -15,12 +16,22 @@ from azure.core.credentials import AccessToken, AccessTokenInfo, TokenRequestOpt
|
|
15
16
|
from azure.core.exceptions import ClientAuthenticationError
|
16
17
|
|
17
18
|
from .. import CredentialUnavailableError
|
18
|
-
from .._internal import
|
19
|
+
from .._internal import (
|
20
|
+
_scopes_to_resource,
|
21
|
+
resolve_tenant,
|
22
|
+
within_dac,
|
23
|
+
validate_tenant_id,
|
24
|
+
validate_scope,
|
25
|
+
validate_subscription,
|
26
|
+
)
|
19
27
|
from .._internal.decorators import log_get_token
|
20
28
|
|
21
29
|
|
30
|
+
_LOGGER = logging.getLogger(__name__)
|
31
|
+
|
22
32
|
CLI_NOT_FOUND = "Azure CLI not found on path"
|
23
|
-
COMMAND_LINE = "
|
33
|
+
# COMMAND_LINE = "account get-access-token --output json --resource {}"
|
34
|
+
COMMAND_LINE = ["account", "get-access-token", "--output", "json"]
|
24
35
|
EXECUTABLE_NAME = "az"
|
25
36
|
NOT_LOGGED_IN = "Please run 'az login' to set up an account"
|
26
37
|
|
@@ -31,6 +42,8 @@ class AzureCliCredential:
|
|
31
42
|
This requires previously logging in to Azure via "az login", and will use the CLI's currently logged in identity.
|
32
43
|
|
33
44
|
:keyword str tenant_id: Optional tenant to include in the token request.
|
45
|
+
:keyword str subscription: The name or ID of a subscription. Set this to acquire tokens for an account other
|
46
|
+
than the Azure CLI's current account.
|
34
47
|
:keyword List[str] additionally_allowed_tenants: Specifies tenants in addition to the specified "tenant_id"
|
35
48
|
for which the credential may acquire tokens. Add the wildcard value "*" to allow the credential to
|
36
49
|
acquire tokens for any tenant the application can access.
|
@@ -50,12 +63,17 @@ class AzureCliCredential:
|
|
50
63
|
self,
|
51
64
|
*,
|
52
65
|
tenant_id: str = "",
|
66
|
+
subscription: Optional[str] = None,
|
53
67
|
additionally_allowed_tenants: Optional[List[str]] = None,
|
54
68
|
process_timeout: int = 10,
|
55
69
|
) -> None:
|
56
70
|
if tenant_id:
|
57
71
|
validate_tenant_id(tenant_id)
|
72
|
+
if subscription:
|
73
|
+
validate_subscription(subscription)
|
74
|
+
|
58
75
|
self.tenant_id = tenant_id
|
76
|
+
self.subscription = subscription
|
59
77
|
self._additionally_allowed_tenants = additionally_allowed_tenants or []
|
60
78
|
self._process_timeout = process_timeout
|
61
79
|
|
@@ -135,7 +153,7 @@ class AzureCliCredential:
|
|
135
153
|
validate_scope(scope)
|
136
154
|
|
137
155
|
resource = _scopes_to_resource(*scopes)
|
138
|
-
|
156
|
+
command_args = COMMAND_LINE + ["--resource", resource]
|
139
157
|
tenant = resolve_tenant(
|
140
158
|
default_tenant=self.tenant_id,
|
141
159
|
tenant_id=tenant_id,
|
@@ -143,8 +161,11 @@ class AzureCliCredential:
|
|
143
161
|
**kwargs,
|
144
162
|
)
|
145
163
|
if tenant:
|
146
|
-
|
147
|
-
|
164
|
+
command_args += ["--tenant", tenant]
|
165
|
+
|
166
|
+
if self.subscription:
|
167
|
+
command_args += ["--subscription", self.subscription]
|
168
|
+
output = _run_command(command_args, self._process_timeout)
|
148
169
|
|
149
170
|
token = parse_token(output)
|
150
171
|
if not token:
|
@@ -211,15 +232,13 @@ def sanitize_output(output: str) -> str:
|
|
211
232
|
return re.sub(r"\"accessToken\": \"(.*?)(\"|$)", "****", output)
|
212
233
|
|
213
234
|
|
214
|
-
def _run_command(
|
235
|
+
def _run_command(command_args: List[str], timeout: int) -> str:
|
215
236
|
# Ensure executable exists in PATH first. This avoids a subprocess call that would fail anyway.
|
216
|
-
|
237
|
+
az_path = shutil.which(EXECUTABLE_NAME)
|
238
|
+
if not az_path:
|
217
239
|
raise CredentialUnavailableError(message=CLI_NOT_FOUND)
|
218
240
|
|
219
|
-
|
220
|
-
args = ["cmd", "/c", command]
|
221
|
-
else:
|
222
|
-
args = ["/bin/sh", "-c", command]
|
241
|
+
args = [az_path] + command_args
|
223
242
|
try:
|
224
243
|
working_directory = get_safe_working_dir()
|
225
244
|
|
@@ -231,13 +250,16 @@ def _run_command(command: str, timeout: int) -> str:
|
|
231
250
|
"timeout": timeout,
|
232
251
|
"env": dict(os.environ, AZURE_CORE_NO_COLOR="true"),
|
233
252
|
}
|
253
|
+
_LOGGER.debug("Executing subprocess with the following arguments %s", args)
|
234
254
|
return subprocess.check_output(args, **kwargs)
|
235
255
|
except subprocess.CalledProcessError as ex:
|
236
256
|
# non-zero return from shell
|
237
257
|
# Fallback check in case the executable is not found while executing subprocess.
|
238
|
-
if ex.returncode == 127 or ex.stderr.startswith("'az' is not recognized"):
|
258
|
+
if ex.returncode == 127 or (ex.stderr is not None and ex.stderr.startswith("'az' is not recognized")):
|
239
259
|
raise CredentialUnavailableError(message=CLI_NOT_FOUND) from ex
|
240
|
-
if
|
260
|
+
if ex.stderr is not None and (
|
261
|
+
("az login" in ex.stderr or "az account set" in ex.stderr) and "AADSTS" not in ex.stderr
|
262
|
+
):
|
241
263
|
raise CredentialUnavailableError(message=NOT_LOGGED_IN) from ex
|
242
264
|
|
243
265
|
# return code is from the CLI -> propagate its output
|
@@ -252,7 +274,7 @@ def _run_command(command: str, timeout: int) -> str:
|
|
252
274
|
# failed to execute 'cmd' or '/bin/sh'
|
253
275
|
error = CredentialUnavailableError(message="Failed to execute '{}'".format(args[0]))
|
254
276
|
raise error from ex
|
255
|
-
except Exception as ex:
|
277
|
+
except Exception as ex:
|
256
278
|
# could be a timeout, for example
|
257
279
|
error = CredentialUnavailableError(message="Failed to invoke the Azure CLI")
|
258
280
|
raise error from ex
|
@@ -192,7 +192,7 @@ def run_command_line(command_line: List[str], timeout: int) -> str:
|
|
192
192
|
proc = start_process(command_line)
|
193
193
|
stdout, stderr = proc.communicate(**kwargs)
|
194
194
|
|
195
|
-
except Exception as ex:
|
195
|
+
except Exception as ex:
|
196
196
|
# failed to execute "cmd" or "/bin/sh", or timed out; PowerShell and Az.Account may or may not be installed
|
197
197
|
# (handling Exception here because subprocess.SubprocessError and .TimeoutExpired were added in 3.3)
|
198
198
|
if proc and not proc.returncode:
|
@@ -37,8 +37,8 @@ class ChainedTokenCredential:
|
|
37
37
|
"""A sequence of credentials that is itself a credential.
|
38
38
|
|
39
39
|
Its :func:`get_token` method calls ``get_token`` on each credential in the sequence, in order, returning the first
|
40
|
-
valid token received. For more information, see
|
41
|
-
https://aka.ms/azsdk/python/identity/credential-chains#chainedtokencredential-overview.
|
40
|
+
valid token received. For more information, see `ChainedTokenCredential overview
|
41
|
+
<"https://aka.ms/azsdk/python/identity/credential-chains#chainedtokencredential-overview">`__.
|
42
42
|
|
43
43
|
:param credentials: credential instances to form the chain
|
44
44
|
:type credentials: ~azure.core.credentials.TokenCredential
|
@@ -24,8 +24,9 @@ _LOGGER = logging.getLogger(__name__)
|
|
24
24
|
|
25
25
|
|
26
26
|
class DefaultAzureCredential(ChainedTokenCredential):
|
27
|
-
"""A credential capable of handling most Azure SDK authentication scenarios. See
|
28
|
-
|
27
|
+
"""A credential capable of handling most Azure SDK authentication scenarios. For more information, See
|
28
|
+
`Usage guidance for DefaultAzureCredential
|
29
|
+
<"https://aka.ms/azsdk/python/identity/credential-chains#usage-guidance-for-defaultazurecredential">`__.
|
29
30
|
|
30
31
|
The identity it uses depends on the environment. When an access token is needed, it requests one using these
|
31
32
|
identities in turn, stopping when one provides a token:
|
@@ -153,7 +154,7 @@ class DefaultAzureCredential(ChainedTokenCredential):
|
|
153
154
|
WorkloadIdentityCredential(
|
154
155
|
client_id=cast(str, client_id),
|
155
156
|
tenant_id=workload_identity_tenant_id,
|
156
|
-
|
157
|
+
token_file_path=os.environ[EnvironmentVariables.AZURE_FEDERATED_TOKEN_FILE],
|
157
158
|
**kwargs
|
158
159
|
)
|
159
160
|
)
|
@@ -89,7 +89,7 @@ class ImdsCredential(MsalManagedIdentityClient):
|
|
89
89
|
# IMDS responded
|
90
90
|
_check_forbidden_response(ex)
|
91
91
|
self._endpoint_available = True
|
92
|
-
except Exception as ex:
|
92
|
+
except Exception as ex:
|
93
93
|
error_message = (
|
94
94
|
"ManagedIdentityCredential authentication unavailable, no response from the IMDS endpoint."
|
95
95
|
)
|
@@ -119,7 +119,7 @@ class ImdsCredential(MsalManagedIdentityClient):
|
|
119
119
|
raise ClientAuthenticationError(message=ex.message, response=ex.response) from ex
|
120
120
|
except json.decoder.JSONDecodeError as ex:
|
121
121
|
raise CredentialUnavailableError(message="ManagedIdentityCredential authentication unavailable.") from ex
|
122
|
-
except Exception as ex:
|
122
|
+
except Exception as ex:
|
123
123
|
# if anything else was raised, assume the endpoint is unavailable
|
124
124
|
error_message = "ManagedIdentityCredential authentication unavailable, no response from the IMDS endpoint."
|
125
125
|
raise CredentialUnavailableError(error_message) from ex
|
@@ -108,7 +108,7 @@ class ManagedIdentityCredential:
|
|
108
108
|
self._credential = WorkloadIdentityCredential(
|
109
109
|
tenant_id=os.environ[EnvironmentVariables.AZURE_TENANT_ID],
|
110
110
|
client_id=workload_client_id,
|
111
|
-
|
111
|
+
token_file_path=os.environ[EnvironmentVariables.AZURE_FEDERATED_TOKEN_FILE],
|
112
112
|
**kwargs,
|
113
113
|
)
|
114
114
|
else:
|
@@ -13,6 +13,7 @@ from .utils import (
|
|
13
13
|
normalize_authority,
|
14
14
|
resolve_tenant,
|
15
15
|
validate_scope,
|
16
|
+
validate_subscription,
|
16
17
|
validate_tenant_id,
|
17
18
|
within_credential_chain,
|
18
19
|
within_dac,
|
@@ -49,6 +50,7 @@ __all__ = [
|
|
49
50
|
"normalize_authority",
|
50
51
|
"resolve_tenant",
|
51
52
|
"validate_scope",
|
53
|
+
"validate_subscription",
|
52
54
|
"within_credential_chain",
|
53
55
|
"within_dac",
|
54
56
|
"wrap_exceptions",
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/auth_code_redirect_handler.py
CHANGED
@@ -28,7 +28,7 @@ class AuthCodeRedirectHandler(BaseHTTPRequestHandler):
|
|
28
28
|
|
29
29
|
self.wfile.write(b"Authentication complete. You can close this window.")
|
30
30
|
|
31
|
-
def log_message(self, format, *args): # pylint: disable=redefined-builtin
|
31
|
+
def log_message(self, format, *args): # pylint: disable=redefined-builtin
|
32
32
|
pass # this prevents server dumping messages to stdout
|
33
33
|
|
34
34
|
|
@@ -22,24 +22,32 @@ def log_get_token(fn):
|
|
22
22
|
try:
|
23
23
|
token = fn(*args, **kwargs)
|
24
24
|
_LOGGER.log(
|
25
|
-
logging.DEBUG if within_credential_chain.get() else logging.INFO,
|
25
|
+
logging.DEBUG if within_credential_chain.get() else logging.INFO,
|
26
|
+
"%s succeeded",
|
27
|
+
fn.__qualname__,
|
26
28
|
)
|
27
29
|
if _LOGGER.isEnabledFor(logging.DEBUG):
|
28
30
|
try:
|
29
|
-
base64_meta_data = token.token.split(".")[1]
|
30
|
-
|
31
|
+
base64_meta_data = token.token.split(".")[1]
|
32
|
+
padding_needed = -len(base64_meta_data) % 4
|
33
|
+
if padding_needed:
|
34
|
+
base64_meta_data += "=" * padding_needed
|
35
|
+
json_bytes = base64.urlsafe_b64decode(base64_meta_data)
|
31
36
|
json_string = json_bytes.decode("utf-8")
|
32
37
|
json_dict = json.loads(json_string)
|
33
38
|
upn = json_dict.get("upn", "unavailableUpn")
|
39
|
+
appid = json_dict.get("appid", "<unavailable>")
|
40
|
+
tid = json_dict.get("tid", "<unavailable>")
|
41
|
+
oid = json_dict.get("oid", "<unavailable>")
|
34
42
|
log_string = (
|
35
|
-
"[Authenticated account] Client ID: {}.
|
36
|
-
"
|
43
|
+
f"[Authenticated account] Client ID: {appid}. "
|
44
|
+
f"Tenant ID: {tid}. User Principal Name: {upn}. Object ID (user): {oid}"
|
37
45
|
)
|
38
46
|
_LOGGER.debug(log_string)
|
39
47
|
except Exception as ex: # pylint: disable=broad-except
|
40
48
|
_LOGGER.debug("Failed to log the account information: %s", ex, exc_info=True)
|
41
49
|
return token
|
42
|
-
except Exception as ex:
|
50
|
+
except Exception as ex:
|
43
51
|
_LOGGER.log(
|
44
52
|
logging.DEBUG if within_credential_chain.get() else logging.WARNING,
|
45
53
|
"%s failed: %s",
|
@@ -67,7 +75,7 @@ def wrap_exceptions(fn):
|
|
67
75
|
return fn(*args, **kwargs)
|
68
76
|
except ClientAuthenticationError:
|
69
77
|
raise
|
70
|
-
except Exception as ex:
|
78
|
+
except Exception as ex:
|
71
79
|
auth_error = ClientAuthenticationError(message="Authentication failed: {}".format(ex))
|
72
80
|
raise auth_error from ex
|
73
81
|
|
@@ -224,7 +224,7 @@ class InteractiveCredential(MsalCredential, ABC):
|
|
224
224
|
|
225
225
|
# this may be the first authentication, or the user may have authenticated a different identity
|
226
226
|
self._auth_record = _build_auth_record(result)
|
227
|
-
except Exception as ex:
|
227
|
+
except Exception as ex:
|
228
228
|
_LOGGER.warning(
|
229
229
|
"%s.%s failed: %s",
|
230
230
|
self.__class__.__name__,
|
@@ -7,7 +7,7 @@ from typing import Any, Dict, Optional, Union
|
|
7
7
|
|
8
8
|
from azure.core.exceptions import ClientAuthenticationError
|
9
9
|
from azure.core.pipeline.policies import ContentDecodePolicy
|
10
|
-
from azure.core.pipeline.transport import ( # pylint:disable=
|
10
|
+
from azure.core.pipeline.transport import ( # pylint:disable=no-legacy-azure-core-http-response-import
|
11
11
|
HttpRequest,
|
12
12
|
HttpResponse,
|
13
13
|
)
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/msal_managed_identity_client.py
CHANGED
@@ -59,6 +59,7 @@ class MsalManagedIdentityClient(abc.ABC): # pylint:disable=client-accepts-api-v
|
|
59
59
|
token_type=result.get("token_type", "Bearer"),
|
60
60
|
refresh_on=refresh_on,
|
61
61
|
)
|
62
|
+
error_desc = ""
|
62
63
|
if result and "error" in result:
|
63
64
|
error_desc = cast(str, result["error"])
|
64
65
|
error_message = self.get_unavailable_message(error_desc)
|
@@ -186,7 +187,7 @@ class MsalManagedIdentityClient(abc.ABC): # pylint:disable=client-accepts-api-v
|
|
186
187
|
exc_info=_LOGGER.isEnabledFor(logging.DEBUG),
|
187
188
|
)
|
188
189
|
raise ClientAuthenticationError(self.get_unavailable_message(str(ex))) from ex
|
189
|
-
except Exception as ex:
|
190
|
+
except Exception as ex:
|
190
191
|
_LOGGER.log(
|
191
192
|
logging.DEBUG if within_credential_chain.get() else logging.WARNING,
|
192
193
|
"%s.%s failed: %s",
|
@@ -88,7 +88,7 @@ class SharedTokenCacheBase(ABC): # pylint: disable=too-many-instance-attributes
|
|
88
88
|
authority: Optional[str] = None,
|
89
89
|
tenant_id: Optional[str] = None,
|
90
90
|
**kwargs: Any
|
91
|
-
) -> None:
|
91
|
+
) -> None:
|
92
92
|
self._authority = normalize_authority(authority) if authority else get_default_authority()
|
93
93
|
environment = urlparse(self._authority).netloc
|
94
94
|
self._environment_aliases = KNOWN_ALIASES.get(environment) or frozenset((environment,))
|
@@ -246,7 +246,7 @@ class SharedTokenCacheBase(ABC): # pylint: disable=too-many-instance-attributes
|
|
246
246
|
return AccessTokenInfo(
|
247
247
|
token["secret"], expires_on, token_type=token.get("token_type", "Bearer"), refresh_on=refresh_on
|
248
248
|
)
|
249
|
-
except Exception as ex:
|
249
|
+
except Exception as ex:
|
250
250
|
message = "Error accessing cached data: {}".format(ex)
|
251
251
|
raise CredentialUnavailableError(message=message) from ex
|
252
252
|
|
@@ -262,7 +262,7 @@ class SharedTokenCacheBase(ABC): # pylint: disable=too-many-instance-attributes
|
|
262
262
|
msal.TokenCache.CredentialType.REFRESH_TOKEN, query={"home_account_id": account["home_account_id"]}
|
263
263
|
)
|
264
264
|
return [token["secret"] for token in cache_entries if "secret" in token]
|
265
|
-
except Exception as ex:
|
265
|
+
except Exception as ex:
|
266
266
|
message = "Error accessing cached data: {}".format(ex)
|
267
267
|
raise CredentialUnavailableError(message=message) from ex
|
268
268
|
|
@@ -20,6 +20,7 @@ _LOGGER = logging.getLogger(__name__)
|
|
20
20
|
|
21
21
|
VALID_TENANT_ID_CHARACTERS = frozenset(ascii_letters + digits + "-.")
|
22
22
|
VALID_SCOPE_CHARACTERS = frozenset(ascii_letters + digits + "_-.:/")
|
23
|
+
VALID_SUBSCRIPTION_CHARACTERS = frozenset(ascii_letters + digits + "_-. ")
|
23
24
|
|
24
25
|
|
25
26
|
def normalize_authority(authority: str) -> str:
|
@@ -68,7 +69,21 @@ def validate_tenant_id(tenant_id: str) -> None:
|
|
68
69
|
if not tenant_id or any(c not in VALID_TENANT_ID_CHARACTERS for c in tenant_id):
|
69
70
|
raise ValueError(
|
70
71
|
"Invalid tenant ID provided. You can locate your tenant ID by following the instructions here: "
|
71
|
-
|
72
|
+
"https://learn.microsoft.com/partner-center/find-ids-and-domain-names"
|
73
|
+
)
|
74
|
+
|
75
|
+
|
76
|
+
def validate_subscription(subscription: str) -> None:
|
77
|
+
"""Raise ValueError if subscription is empty or contains a character invalid for a subscription name/ID.
|
78
|
+
|
79
|
+
:param str subscription: subscription ID to validate
|
80
|
+
:raises: ValueError if subscription is empty or contains a character invalid for a subscription ID.
|
81
|
+
"""
|
82
|
+
if not subscription or any(c not in VALID_SUBSCRIPTION_CHARACTERS for c in subscription):
|
83
|
+
raise ValueError(
|
84
|
+
f"Subscription '{subscription}' contains invalid characters. If this is the name of a subscription, use "
|
85
|
+
"its ID instead. You can locate your subscription by following the instructions listed here: "
|
86
|
+
"https://learn.microsoft.com/azure/azure-portal/get-subscription-tenant-id"
|
72
87
|
)
|
73
88
|
|
74
89
|
|
@@ -77,7 +92,7 @@ def resolve_tenant(
|
|
77
92
|
tenant_id: Optional[str] = None,
|
78
93
|
*,
|
79
94
|
additionally_allowed_tenants: Optional[List[str]] = None,
|
80
|
-
**_
|
95
|
+
**_,
|
81
96
|
) -> str:
|
82
97
|
"""Returns the correct tenant for a token request given a credential's configuration.
|
83
98
|
|
@@ -3,6 +3,7 @@
|
|
3
3
|
# Licensed under the MIT License.
|
4
4
|
# ------------------------------------
|
5
5
|
import asyncio
|
6
|
+
import logging
|
6
7
|
import os
|
7
8
|
import shutil
|
8
9
|
import sys
|
@@ -26,6 +27,9 @@ from ..._credentials.azd_cli import (
|
|
26
27
|
from ..._internal import resolve_tenant, within_dac, validate_tenant_id, validate_scope
|
27
28
|
|
28
29
|
|
30
|
+
_LOGGER = logging.getLogger(__name__)
|
31
|
+
|
32
|
+
|
29
33
|
class AzureDeveloperCliCredential(AsyncContextManager):
|
30
34
|
"""Authenticates by requesting a token from the Azure Developer CLI.
|
31
35
|
|
@@ -153,8 +157,9 @@ class AzureDeveloperCliCredential(AsyncContextManager):
|
|
153
157
|
for scope in scopes:
|
154
158
|
validate_scope(scope)
|
155
159
|
|
156
|
-
|
157
|
-
|
160
|
+
command_args = COMMAND_LINE.copy()
|
161
|
+
for scope in scopes:
|
162
|
+
command_args += ["--scope", scope]
|
158
163
|
tenant = resolve_tenant(
|
159
164
|
default_tenant=self.tenant_id,
|
160
165
|
tenant_id=tenant_id,
|
@@ -163,8 +168,8 @@ class AzureDeveloperCliCredential(AsyncContextManager):
|
|
163
168
|
)
|
164
169
|
|
165
170
|
if tenant:
|
166
|
-
|
167
|
-
output = await _run_command(
|
171
|
+
command_args += ["--tenant-id", tenant]
|
172
|
+
output = await _run_command(command_args, self._process_timeout)
|
168
173
|
|
169
174
|
token = parse_token(output)
|
170
175
|
if not token:
|
@@ -184,19 +189,17 @@ class AzureDeveloperCliCredential(AsyncContextManager):
|
|
184
189
|
"""Calling this method is unnecessary"""
|
185
190
|
|
186
191
|
|
187
|
-
async def _run_command(
|
192
|
+
async def _run_command(command_args: List[str], timeout: int) -> str:
|
188
193
|
# Ensure executable exists in PATH first. This avoids a subprocess call that would fail anyway.
|
189
|
-
|
194
|
+
azd_path = shutil.which(EXECUTABLE_NAME)
|
195
|
+
if not azd_path:
|
190
196
|
raise CredentialUnavailableError(message=CLI_NOT_FOUND)
|
191
197
|
|
192
|
-
|
193
|
-
args = ("cmd", "/c " + command)
|
194
|
-
else:
|
195
|
-
args = ("/bin/sh", "-c", command)
|
196
|
-
|
198
|
+
args = [azd_path] + command_args
|
197
199
|
working_directory = get_safe_working_dir()
|
198
200
|
|
199
201
|
try:
|
202
|
+
_LOGGER.debug("Executing subprocess with the following arguments %s", args)
|
200
203
|
proc = await asyncio.create_subprocess_exec(
|
201
204
|
*args,
|
202
205
|
stdout=asyncio.subprocess.PIPE,
|
@@ -3,6 +3,7 @@
|
|
3
3
|
# Licensed under the MIT License.
|
4
4
|
# ------------------------------------
|
5
5
|
import asyncio
|
6
|
+
import logging
|
6
7
|
import os
|
7
8
|
import shutil
|
8
9
|
import sys
|
@@ -23,7 +24,17 @@ from ..._credentials.azure_cli import (
|
|
23
24
|
parse_token,
|
24
25
|
sanitize_output,
|
25
26
|
)
|
26
|
-
from ..._internal import
|
27
|
+
from ..._internal import (
|
28
|
+
_scopes_to_resource,
|
29
|
+
resolve_tenant,
|
30
|
+
within_dac,
|
31
|
+
validate_tenant_id,
|
32
|
+
validate_scope,
|
33
|
+
validate_subscription,
|
34
|
+
)
|
35
|
+
|
36
|
+
|
37
|
+
_LOGGER = logging.getLogger(__name__)
|
27
38
|
|
28
39
|
|
29
40
|
class AzureCliCredential(AsyncContextManager):
|
@@ -32,6 +43,8 @@ class AzureCliCredential(AsyncContextManager):
|
|
32
43
|
This requires previously logging in to Azure via "az login", and will use the CLI's currently logged in identity.
|
33
44
|
|
34
45
|
:keyword str tenant_id: Optional tenant to include in the token request.
|
46
|
+
:keyword str subscription: The name or ID of a subscription. Set this to acquire tokens for an account other
|
47
|
+
than the Azure CLI's current account.
|
35
48
|
:keyword List[str] additionally_allowed_tenants: Specifies tenants in addition to the specified "tenant_id"
|
36
49
|
for which the credential may acquire tokens. Add the wildcard value "*" to allow the credential to
|
37
50
|
acquire tokens for any tenant the application can access.
|
@@ -51,12 +64,17 @@ class AzureCliCredential(AsyncContextManager):
|
|
51
64
|
self,
|
52
65
|
*,
|
53
66
|
tenant_id: str = "",
|
67
|
+
subscription: Optional[str] = None,
|
54
68
|
additionally_allowed_tenants: Optional[List[str]] = None,
|
55
69
|
process_timeout: int = 10,
|
56
70
|
) -> None:
|
57
71
|
if tenant_id:
|
58
72
|
validate_tenant_id(tenant_id)
|
73
|
+
if subscription:
|
74
|
+
validate_subscription(subscription)
|
75
|
+
|
59
76
|
self.tenant_id = tenant_id
|
77
|
+
self.subscription = subscription
|
60
78
|
self._additionally_allowed_tenants = additionally_allowed_tenants or []
|
61
79
|
self._process_timeout = process_timeout
|
62
80
|
|
@@ -131,7 +149,7 @@ class AzureCliCredential(AsyncContextManager):
|
|
131
149
|
validate_scope(scope)
|
132
150
|
|
133
151
|
resource = _scopes_to_resource(*scopes)
|
134
|
-
|
152
|
+
command_args = COMMAND_LINE + ["--resource", resource]
|
135
153
|
tenant = resolve_tenant(
|
136
154
|
default_tenant=self.tenant_id,
|
137
155
|
tenant_id=tenant_id,
|
@@ -140,8 +158,11 @@ class AzureCliCredential(AsyncContextManager):
|
|
140
158
|
)
|
141
159
|
|
142
160
|
if tenant:
|
143
|
-
|
144
|
-
|
161
|
+
command_args += ["--tenant", tenant]
|
162
|
+
|
163
|
+
if self.subscription:
|
164
|
+
command_args += ["--subscription", self.subscription]
|
165
|
+
output = await _run_command(command_args, self._process_timeout)
|
145
166
|
|
146
167
|
token = parse_token(output)
|
147
168
|
if not token:
|
@@ -161,19 +182,16 @@ class AzureCliCredential(AsyncContextManager):
|
|
161
182
|
"""Calling this method is unnecessary"""
|
162
183
|
|
163
184
|
|
164
|
-
async def _run_command(
|
185
|
+
async def _run_command(command_args: List[str], timeout: int) -> str:
|
165
186
|
# Ensure executable exists in PATH first. This avoids a subprocess call that would fail anyway.
|
166
|
-
|
187
|
+
az_path = shutil.which(EXECUTABLE_NAME)
|
188
|
+
if not az_path:
|
167
189
|
raise CredentialUnavailableError(message=CLI_NOT_FOUND)
|
168
190
|
|
169
|
-
|
170
|
-
args = ("cmd", "/c " + command)
|
171
|
-
else:
|
172
|
-
args = ("/bin/sh", "-c", command)
|
173
|
-
|
191
|
+
args = [az_path] + command_args
|
174
192
|
working_directory = get_safe_working_dir()
|
175
|
-
|
176
193
|
try:
|
194
|
+
_LOGGER.debug("Executing subprocess with the following arguments %s", args)
|
177
195
|
proc = await asyncio.create_subprocess_exec(
|
178
196
|
*args,
|
179
197
|
stdout=asyncio.subprocess.PIPE,
|
@@ -89,7 +89,7 @@ class DefaultAzureCredential(ChainedTokenCredential):
|
|
89
89
|
:caption: Create a DefaultAzureCredential.
|
90
90
|
"""
|
91
91
|
|
92
|
-
def __init__(self, **kwargs: Any) -> None: # pylint: disable=too-many-statements
|
92
|
+
def __init__(self, **kwargs: Any) -> None: # pylint: disable=too-many-statements
|
93
93
|
if "tenant_id" in kwargs:
|
94
94
|
raise TypeError("'tenant_id' is not supported in DefaultAzureCredential.")
|
95
95
|
|
@@ -145,7 +145,7 @@ class DefaultAzureCredential(ChainedTokenCredential):
|
|
145
145
|
WorkloadIdentityCredential(
|
146
146
|
client_id=cast(str, client_id),
|
147
147
|
tenant_id=workload_identity_tenant_id,
|
148
|
-
|
148
|
+
token_file_path=os.environ[EnvironmentVariables.AZURE_FEDERATED_TOKEN_FILE],
|
149
149
|
**kwargs
|
150
150
|
)
|
151
151
|
)
|
@@ -37,7 +37,7 @@ class ImdsCredential(AsyncContextManager, GetTokenMixin):
|
|
37
37
|
async def _acquire_token_silently(self, *scopes: str, **kwargs: Any) -> Optional[AccessTokenInfo]:
|
38
38
|
return self._client.get_cached_token(*scopes)
|
39
39
|
|
40
|
-
async def _request_token(self, *scopes: str, **kwargs: Any) -> AccessTokenInfo:
|
40
|
+
async def _request_token(self, *scopes: str, **kwargs: Any) -> AccessTokenInfo:
|
41
41
|
|
42
42
|
if within_credential_chain.get() and not self._endpoint_available:
|
43
43
|
# If within a chain (e.g. DefaultAzureCredential), we do a quick check to see if the IMDS endpoint
|
@@ -49,7 +49,7 @@ class ImdsCredential(AsyncContextManager, GetTokenMixin):
|
|
49
49
|
# IMDS responded
|
50
50
|
_check_forbidden_response(ex)
|
51
51
|
self._endpoint_available = True
|
52
|
-
except Exception as ex:
|
52
|
+
except Exception as ex:
|
53
53
|
error_message = (
|
54
54
|
"ManagedIdentityCredential authentication unavailable, no response from the IMDS endpoint."
|
55
55
|
)
|
@@ -78,7 +78,7 @@ class ImdsCredential(AsyncContextManager, GetTokenMixin):
|
|
78
78
|
_check_forbidden_response(ex)
|
79
79
|
# any other error is unexpected
|
80
80
|
raise ClientAuthenticationError(message=ex.message, response=ex.response) from ex
|
81
|
-
except Exception as ex:
|
81
|
+
except Exception as ex:
|
82
82
|
# if anything else was raised, assume the endpoint is unavailable
|
83
83
|
error_message = "ManagedIdentityCredential authentication unavailable, no response from the IMDS endpoint."
|
84
84
|
raise CredentialUnavailableError(error_message) from ex
|
@@ -96,7 +96,7 @@ class ManagedIdentityCredential(AsyncContextManager):
|
|
96
96
|
self._credential = WorkloadIdentityCredential(
|
97
97
|
tenant_id=os.environ[EnvironmentVariables.AZURE_TENANT_ID],
|
98
98
|
client_id=workload_client_id,
|
99
|
-
|
99
|
+
token_file_path=os.environ[EnvironmentVariables.AZURE_FEDERATED_TOKEN_FILE],
|
100
100
|
**kwargs
|
101
101
|
)
|
102
102
|
else:
|
@@ -21,24 +21,32 @@ def log_get_token_async(fn):
|
|
21
21
|
try:
|
22
22
|
token = await fn(*args, **kwargs)
|
23
23
|
_LOGGER.log(
|
24
|
-
logging.DEBUG if within_credential_chain.get() else logging.INFO,
|
24
|
+
logging.DEBUG if within_credential_chain.get() else logging.INFO,
|
25
|
+
"%s succeeded",
|
26
|
+
fn.__qualname__,
|
25
27
|
)
|
26
28
|
if _LOGGER.isEnabledFor(logging.DEBUG):
|
27
29
|
try:
|
28
|
-
base64_meta_data = token.token.split(".")[1]
|
29
|
-
|
30
|
+
base64_meta_data = token.token.split(".")[1]
|
31
|
+
padding_needed = -len(base64_meta_data) % 4
|
32
|
+
if padding_needed:
|
33
|
+
base64_meta_data += "=" * padding_needed
|
34
|
+
json_bytes = base64.urlsafe_b64decode(base64_meta_data)
|
30
35
|
json_string = json_bytes.decode("utf-8")
|
31
36
|
json_dict = json.loads(json_string)
|
32
37
|
upn = json_dict.get("upn", "unavailableUpn")
|
38
|
+
appid = json_dict.get("appid", "<unavailable>")
|
39
|
+
tid = json_dict.get("tid", "<unavailable>")
|
40
|
+
oid = json_dict.get("oid", "<unavailable>")
|
33
41
|
log_string = (
|
34
|
-
"[Authenticated account] Client ID: {}.
|
35
|
-
"
|
42
|
+
f"[Authenticated account] Client ID: {appid}. "
|
43
|
+
f"Tenant ID: {tid}. User Principal Name: {upn}. Object ID (user): {oid}"
|
36
44
|
)
|
37
45
|
_LOGGER.debug(log_string)
|
38
46
|
except Exception as ex: # pylint: disable=broad-except
|
39
47
|
_LOGGER.debug("Failed to log the account information: %s", ex, exc_info=True)
|
40
48
|
return token
|
41
|
-
except Exception as ex:
|
49
|
+
except Exception as ex:
|
42
50
|
_LOGGER.log(
|
43
51
|
logging.DEBUG if within_credential_chain.get() else logging.WARNING,
|
44
52
|
"%s failed: %s",
|
@@ -67,7 +75,7 @@ def wrap_exceptions(fn):
|
|
67
75
|
return result
|
68
76
|
except ClientAuthenticationError:
|
69
77
|
raise
|
70
|
-
except Exception as ex:
|
78
|
+
except Exception as ex:
|
71
79
|
auth_error = ClientAuthenticationError(message="Authentication failed: {}".format(ex))
|
72
80
|
raise auth_error from ex
|
73
81
|
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_internal/managed_identity_client.py
CHANGED
@@ -15,7 +15,7 @@ from ..._internal.pipeline import build_async_pipeline
|
|
15
15
|
T = TypeVar("T", bound="AsyncManagedIdentityClient")
|
16
16
|
|
17
17
|
|
18
|
-
# pylint:disable=async-client-bad-name
|
18
|
+
# pylint:disable=async-client-bad-name
|
19
19
|
class AsyncManagedIdentityClient(AsyncContextManager, ManagedIdentityClientBase):
|
20
20
|
async def __aenter__(self: T) -> T:
|
21
21
|
await self._pipeline.__aenter__()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: py2docfx
|
3
|
-
Version: 0.1.11.
|
3
|
+
Version: 0.1.11.dev1989123
|
4
4
|
Summary: A package built based on Sphinx which download source code package and generate yaml files supported by docfx.
|
5
5
|
Author: Microsoft Corporation
|
6
6
|
License: MIT License
|
@@ -1,11 +1,11 @@
|
|
1
1
|
py2docfx/__init__.py,sha256=kPRhPGPC1JknDotkksG428c1iIgfFr_4_7Jm-llrowY,72
|
2
|
-
py2docfx/__main__.py,sha256=
|
2
|
+
py2docfx/__main__.py,sha256=RAMBoN2fmo5noLFHnaWsfII82FVQiTKJrBU8tdr-RfQ,5783
|
3
3
|
py2docfx/convert_prepare/__init__.py,sha256=XxtxrP0kmW3ZBHIAoxsPDEHzcgeC0WSnole8Lk6CjKs,11
|
4
4
|
py2docfx/convert_prepare/arg_parser.py,sha256=Wa1iK8a0Gb3QqaS4X7nUPGvh-7mWhuBS9IVbmnjC770,7606
|
5
5
|
py2docfx/convert_prepare/constants.py,sha256=RC5DqNkqWvx4hb91FrajZ1R9dBFLxcPyoEJ43jdm36E,102
|
6
6
|
py2docfx/convert_prepare/environment.py,sha256=SpXy3oE9QuDOXK5J3lJd3kl-oXGATUDxe0K137zngXY,6988
|
7
7
|
py2docfx/convert_prepare/generate_conf.py,sha256=wqs6iyElzJarH-20_qEL9zvZvt5xfBMsGXSXPSZy6wg,2295
|
8
|
-
py2docfx/convert_prepare/generate_document.py,sha256=
|
8
|
+
py2docfx/convert_prepare/generate_document.py,sha256=vZ0WCHPQfQ11wFLclcKW-7mCkEgvJ1z90yn8BF04u5c,2937
|
9
9
|
py2docfx/convert_prepare/get_source.py,sha256=AWkvjdobuoMGob_wBiw_SI5jeewcYUaCoaSZdGt4Hgc,5241
|
10
10
|
py2docfx/convert_prepare/git.py,sha256=OIoaX_0LG5ueY8zmUwrbxl_YyMxwLzgTp6g0uSkC2Y0,6617
|
11
11
|
py2docfx/convert_prepare/install_package.py,sha256=hATmgazcSX7k2n4jQXh9sQMyNUc1k1YqHv5K5UMALq4,262
|
@@ -17,7 +17,7 @@ py2docfx/convert_prepare/paths.py,sha256=964RX81Qf__rzXgEATfqBNFCKTYVjLt9J7WCz2T
|
|
17
17
|
py2docfx/convert_prepare/pip_utils.py,sha256=GPWGUBcxW8JKreGwxZIAe9AWAI78aL1aFan8DvaAf1o,2228
|
18
18
|
py2docfx/convert_prepare/repo_info.py,sha256=6ASJlhBwf6vZTSENgrWCVlJjlJVhuBxzdQyWEdWAC4c,117
|
19
19
|
py2docfx/convert_prepare/source.py,sha256=6-A7oof3-WAQcQZZVpT9pKiFLH4CCIZeYqq0MN0O3gw,1710
|
20
|
-
py2docfx/convert_prepare/sphinx_caller.py,sha256=
|
20
|
+
py2docfx/convert_prepare/sphinx_caller.py,sha256=6ftolgangs8G7NRKRVLFB0Rhz5vI8RNXZbM6aI5yGGM,4882
|
21
21
|
py2docfx/convert_prepare/subpackage.py,sha256=mXAi_07pXvnPkSLZfykDh_7VeFxfLy74pYlzhMO8N_Q,5183
|
22
22
|
py2docfx/convert_prepare/utils.py,sha256=TwfDjIqIx_nAoSeQ-LX30h_-d96WhPQcAu7P8N_tSjM,1618
|
23
23
|
py2docfx/convert_prepare/conf_templates/conf.py_t,sha256=8zxvY1WiG-z2aiSNDY0719C08QxZLXXEMwKfYSGN0ZE,3811
|
@@ -27,14 +27,14 @@ py2docfx/convert_prepare/subpackage_merge/merge_root_package.py,sha256=uK96qL2as
|
|
27
27
|
py2docfx/convert_prepare/subpackage_merge/merge_toc.py,sha256=nkVqe8R0m8D6cyTYV7aIpMDXorvn4-LXfU_vIK_hJBg,1706
|
28
28
|
py2docfx/convert_prepare/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
29
29
|
py2docfx/convert_prepare/tests/test_environment.py,sha256=08oO7K7cDIOP3TNCVXh0bqYiok_sFpmBFOMbPYULLBk,2103
|
30
|
-
py2docfx/convert_prepare/tests/test_generate_document.py,sha256=
|
30
|
+
py2docfx/convert_prepare/tests/test_generate_document.py,sha256=mY8DRT-WRGIBFdDRdFwa7ZSUQwR-fTQtyKwzrzFZLU8,2621
|
31
31
|
py2docfx/convert_prepare/tests/test_get_source.py,sha256=49dgQrstyfokG4ZCM7tP6d33v2s7eGFpvb2EcR2GJzc,7711
|
32
32
|
py2docfx/convert_prepare/tests/test_pack.py,sha256=xP-Khnj1MfPdIYaUDwXdvXNlI-uHQT3ihZ5d9zCZ914,4195
|
33
33
|
py2docfx/convert_prepare/tests/test_package_info.py,sha256=3B-IzmUjETVO-5s3g3Lmh2E6JgopwnRauv8mB-SDZEM,3361
|
34
34
|
py2docfx/convert_prepare/tests/test_params.py,sha256=itwmVdBMtU1qIXAGaIoaDfvTOYyAL2B_WLsaBV9KUZY,2232
|
35
35
|
py2docfx/convert_prepare/tests/test_post_process_merge_toc.py,sha256=YKOcn4_lf4syGsAvJ9BqpdUUc3SLfK4TiOX1lpXJT_Y,885
|
36
36
|
py2docfx/convert_prepare/tests/test_source.py,sha256=LNFZtvjz6QhVLOxatjWokYCCcoSm0bhTikMF9KoTPIE,2025
|
37
|
-
py2docfx/convert_prepare/tests/test_sphinx_caller.py,sha256=
|
37
|
+
py2docfx/convert_prepare/tests/test_sphinx_caller.py,sha256=yi2M4sct4o6-EBKz4Ye9_lyqwYMiSMLNiPhoBfkX5iw,2748
|
38
38
|
py2docfx/convert_prepare/tests/test_subpackage.py,sha256=famt8LqwS8hCujtzvRLE5Ih8pa7t45y0d1EBk3UdYns,4984
|
39
39
|
py2docfx/convert_prepare/tests/data/generate_document/azure-dummy-sourcecode/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
40
40
|
py2docfx/convert_prepare/tests/data/generate_document/azure-dummy-sourcecode/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1971,28 +1971,28 @@ py2docfx/venv/venv1/Lib/site-packages/azure/identity/_constants.py,sha256=CawcaT
|
|
1971
1971
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_enums.py,sha256=kaZnPeoAQiEYVW19_BaXFaP_rt4viwfiIRPzYuo5rGs,2399
|
1972
1972
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_exceptions.py,sha256=Ilad2QoECsI81JrVIFV3gZfMEetA9EL5PoyBwzLIDWY,1954
|
1973
1973
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_persistent_cache.py,sha256=cCcS1K8dkuaVQ6GiPIsa1ifB8NM74Z2CAKm-Ty6CVLs,5840
|
1974
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_version.py,sha256=
|
1974
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_version.py,sha256=ZFc7EBHITbgcUxJk-s7aMH90qVVpXl15b9zzsytfKd0,170
|
1975
1975
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/__init__.py,sha256=HiD0uRVJ7Okw8ICCzWrMWKeEvf2RUa3DuwdDUgIxg5s,1756
|
1976
1976
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/app_service.py,sha256=mc0GqUWXLjcgkZX64IV3aVmJd1M1-fo5h6ssVe0Iklo,1424
|
1977
1977
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/application.py,sha256=Ew2pypi9Z81E0xLoROEyX0IUlnYG_e4p1NJ3OckNHpM,6435
|
1978
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/authorization_code.py,sha256=
|
1979
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azd_cli.py,sha256=
|
1980
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azure_arc.py,sha256=
|
1981
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azure_cli.py,sha256=
|
1978
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/authorization_code.py,sha256=ZmdEIn710IqPXSeVNzgdHc9IZ-XrN8krZFhp3KYnAzM,7217
|
1979
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azd_cli.py,sha256=KcUoPaJaftVTL6-7r0f1W7L1D2Ds3dEb6JCWJjoNDA0,12440
|
1980
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azure_arc.py,sha256=2B5SYKKGIEg8y8kC_zccSspxqVllKrIgP4WF_WD9ky0,4907
|
1981
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azure_cli.py,sha256=ypx8tGKbPRVE7oOXOQQn73uUeMfuDhkaSrU0RTYTVLo,11275
|
1982
1982
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azure_ml.py,sha256=qLMRTkkecgZRwA6HoXf-9GoEp0HddbPoYioBcWYwOF4,3000
|
1983
1983
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azure_pipelines.py,sha256=xbWqDL0SAM84C_sunvPBQ1fMN8pS3iIdprwmZEa_rLs,8542
|
1984
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azure_powershell.py,sha256=
|
1984
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/azure_powershell.py,sha256=dp-k5ydDPn7gt1kqzr7fWN4YdBqm3F-P29-hRuM47p8,10929
|
1985
1985
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/browser.py,sha256=mkkIqHvkNPYwqcPHRQscx_qtQWDpf0TNBuxVu2ynf6Q,8307
|
1986
1986
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/certificate.py,sha256=uHVCvvdcjkIuamb_66ANHh6TVQAO9lUhcSjxr4J2V-0,9179
|
1987
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/chained.py,sha256=
|
1987
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/chained.py,sha256=FQO13rzJxthtCrlJzR-4HwMP4S7m1yMza0GbjiDxP1E,10015
|
1988
1988
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/client_assertion.py,sha256=cMzxMC46PU0RxWaYjjQ7pdSO6MDaXuaWBN3ZzCfhakY,3434
|
1989
1989
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/client_secret.py,sha256=U4d2uOTMfXCfjTBtZLpM1_uvVDSqQgtfPlMx88oqO_8,3114
|
1990
1990
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/cloud_shell.py,sha256=yyuxWKBM8cp0EI6IbVuGP2LvXfkidV0se5NABBuMH7k,1928
|
1991
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/default.py,sha256=
|
1991
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/default.py,sha256=1HM5XNFhDWpF-44_TqprGyt5hGq1ytSkG6WTaijq-6A,15323
|
1992
1992
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/device_code.py,sha256=DXW99i6FiKJ1EeTbqMqLbRZW8zpHpJkuyURHSe56i8E,6763
|
1993
1993
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/environment.py,sha256=uI3hrPNKdgVxNb1r6-Imaa__30o0nmOGb8VID8QzUR0,9511
|
1994
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/imds.py,sha256=
|
1995
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/managed_identity.py,sha256=
|
1994
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/imds.py,sha256=3-qDYPz5TH38Uamjb1ZxdUPo-V5FlsOLJMJMg5w3GDY,5550
|
1995
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/managed_identity.py,sha256=3sr0wbxGUw2lvJXP25V_APV1yuL3zdc2euMKJdxPB1k,9654
|
1996
1996
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/on_behalf_of.py,sha256=e8av70lj1hwwqrQc7bX1MI5bH5OWsZA6LZvy1ib_M4U,9014
|
1997
1997
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/service_fabric.py,sha256=t2ir_-JJi4krqOa6TqwbiU7vosIZP3_mN0GrQ-sABsc,1454
|
1998
1998
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/shared_cache.py,sha256=kqlEMbHJb1Ky2Whnuwn72N1EjpaEAxW45cCsq72R5Ek,8997
|
@@ -2000,26 +2000,26 @@ py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/silent.py,sha2
|
|
2000
2000
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/user_password.py,sha256=x92tkv7xe-YK-mbM0QBFu0kaHShuMHRZusZs8ByxoSI,4556
|
2001
2001
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/vscode.py,sha256=39g07fYproZ8QR5klBXBNR0p70sClTJOTfrup7EPRDI,10986
|
2002
2002
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_credentials/workload_identity.py,sha256=hxVmnqh8lqJ6hfmkgBfU84Au34_KaJ_S6zrtyPlCAqg,4378
|
2003
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/__init__.py,sha256=
|
2003
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/__init__.py,sha256=bZ5LRc-OWVx1WTrL4gPzz6BUrjlZbSC0nvcY_JUJ1uU,1586
|
2004
2004
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/aad_client.py,sha256=O8b9pnlc6HIRdV0YqrCjYaMOt1z8mYKPE4bOdrYtR-Q,3299
|
2005
2005
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/aad_client_base.py,sha256=5CZE19MJAyFmdGShM-S-RxPYGWCEhbj53uMZyMas5jo,16675
|
2006
2006
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/aadclient_certificate.py,sha256=bURwToOkDTu1C1R-wgDltfDQpmeioQxmMl__Xq64H4g,1890
|
2007
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/auth_code_redirect_handler.py,sha256=
|
2007
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/auth_code_redirect_handler.py,sha256=E4rQw6AvhEDS_CcBOX_dzNPtfcUGp1WXpLO2kK8QFHc,2288
|
2008
2008
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/client_credential_base.py,sha256=YBEnqgTBOebvSoTaCY20qt3ue7_ovK4i0O_HyX_pC3E,2508
|
2009
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/decorators.py,sha256=
|
2009
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/decorators.py,sha256=uM-aP4FsVYT2aR1BX41kdvHHs83XxB-O0vYzRq3YUw4,2877
|
2010
2010
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/get_token_mixin.py,sha256=WTre9ydKPvucT3NySXpqpoOaGKFANk3lYeoong08_3s,7290
|
2011
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/interactive.py,sha256=
|
2011
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/interactive.py,sha256=jmllrTE15PjhJAp81ghmljVtrh3Ps5qayUbBL08e_yk,13848
|
2012
2012
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/linux_vscode_adapter.py,sha256=LL2ImHX7IzfSwOQ0BuvOrQ1do_X6fo_o3b3r4O77nI8,2952
|
2013
2013
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/macos_vscode_adapter.py,sha256=sRcYxS_xaiSaRmruqUH3_wXmDA6BWRACXNs8dnvBkNw,1202
|
2014
2014
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/managed_identity_base.py,sha256=pBEoUq39MElBnuvqwEAsjco2I4wznp3nxwgDkW5qiPo,2416
|
2015
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/managed_identity_client.py,sha256=
|
2016
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/msal_client.py,sha256=
|
2015
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/managed_identity_client.py,sha256=mWD_pDAjsFaUUdiVo5oupe9jt8mCEzraNs0_Wtha8_g,5982
|
2016
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/msal_client.py,sha256=NdISdFIBe4bzmq4jEYaYurUEOHYUnZnZ6vVBuT8JFfU,5783
|
2017
2017
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/msal_credentials.py,sha256=xP3qVooz7zqr94j0vAho3qY_-jSwNpse-HQAPKyMZdY,6041
|
2018
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/msal_managed_identity_client.py,sha256=
|
2018
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/msal_managed_identity_client.py,sha256=rd8rRTye492y940_rUJLUgFBeMaKOBUDBa0NTUuDvjg,9695
|
2019
2019
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/pipeline.py,sha256=Zv7bjJhbKKq3bemZV_PRRTf0UZnIO9QtoO7ID-1-OIs,2867
|
2020
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/shared_token_cache.py,sha256=
|
2020
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/shared_token_cache.py,sha256=Q4sGmpQrrxWu0yXRuZ66ndqxa8CjHORvTp2Suegz2sY,12555
|
2021
2021
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/user_agent.py,sha256=aOlTYL7cTqLLoRppt0oKao64YtYnUrw6BAfDc9pghZg,319
|
2022
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/utils.py,sha256=
|
2022
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/utils.py,sha256=V4p1qdKBh8tenSjsgXHcJhXws4t9Hq_TsqXEPX2Vbuc,5679
|
2023
2023
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/_internal/win_vscode_adapter.py,sha256=XM3JW1YeY9-4p3aauJThbBKVdmQ-RD-pzaAFrS8QhOc,2444
|
2024
2024
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/__init__.py,sha256=sXPK0GJ7WNbMWQaTvbG1SXa2riULBZvayDTlLRzTosY,1325
|
2025
2025
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_bearer_token_provider.py,sha256=2vUCmdarROmCg_tIuY20SIVP5J7NIO-spprGLrt7TDE,1783
|
@@ -2027,9 +2027,9 @@ py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/__init__.p
|
|
2027
2027
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/app_service.py,sha256=xb8LIoDfAdCZj60CiaKtdjUDLecNbLfkuC9Xy1ItwuE,836
|
2028
2028
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/application.py,sha256=vflikwr_RbG7UJaeMiSO7XxlgnAZr8hR_9thacNh7CQ,6539
|
2029
2029
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/authorization_code.py,sha256=05qyzHrEgo2EroIgrZz3af0T8H9AC3jod2TaIR1DTD0,7401
|
2030
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azd_cli.py,sha256=
|
2030
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azd_cli.py,sha256=TiCwnuluniSH9yyZ1ifbW2dpYJ8qYjHPnVVvYzjqRqc,10975
|
2031
2031
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_arc.py,sha256=ottnsKp-t7mpUXrn1I_TtgHKqT75WsZR5qGMkz7_mF0,1857
|
2032
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_cli.py,sha256=
|
2032
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_cli.py,sha256=iUsXxt-nXvY2rXYE08blaSSu7FFgK6ys26cmgPx1yro,9902
|
2033
2033
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_ml.py,sha256=D7hQWuNLFHQb60Za5cXFeAK7aRT5ta0i8banjc4j0tQ,827
|
2034
2034
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_pipelines.py,sha256=FHVId296gbLEIXgBWYiXThMx0_W0lQB6-3LMyrkBa9U,7434
|
2035
2035
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/azure_powershell.py,sha256=zmmW6n5KwtNphkAHex0rg7IOx8i0qzXYIq-NSBdJWng,8693
|
@@ -2038,10 +2038,10 @@ py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/chained.py
|
|
2038
2038
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/client_assertion.py,sha256=f46y6n1fMTTBaEZaMc9Dux7TwcSwGXkQq4pScLf8Jic,3511
|
2039
2039
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/client_secret.py,sha256=JHI9N_0qzvKpV_RvMMjChfnPMRtbPb7FF_n6GIVnKRk,3218
|
2040
2040
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/cloud_shell.py,sha256=jJ4b3hacR-Mzk3vcwvzbxwF4DrN60uyHv1BIhUzD3bA,1225
|
2041
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/default.py,sha256=
|
2041
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/default.py,sha256=wSDNeR94ISWuwaDSHzkOsAqyYp0yQ883tqgIHqqOdtk,13964
|
2042
2042
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/environment.py,sha256=1Duguy5dyhWKx4_vwwH2NMQyiBTPWQsWWy_u5auiRUA,7923
|
2043
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/imds.py,sha256=
|
2044
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/managed_identity.py,sha256=
|
2043
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/imds.py,sha256=IsANbJ1R8JbJ7OAlUa2sy6rXfnT51goG49gIAahNfug,4078
|
2044
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/managed_identity.py,sha256=gj37QkYZtNJLi0b19b-9CGYy_Z12JNwCVAoJCKgNTfw,9034
|
2045
2045
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/on_behalf_of.py,sha256=M6kn3uC-04wywCl9KpuYX1VvFJJBIfIT25TllDhxgzA,7300
|
2046
2046
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/service_fabric.py,sha256=15SUsJiLD29uKgYLeHJgh0EJumCYuM3TYx-JXe-IzOc,845
|
2047
2047
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/shared_cache.py,sha256=_soM-tNKtnmvZ8bbNxyz1tsyR7CTgH2tknbdxFa_rbk,7410
|
@@ -2049,10 +2049,10 @@ py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/vscode.py,
|
|
2049
2049
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_credentials/workload_identity.py,sha256=6kvXuQKxiIFWqEgW6qJdoB6eo3bqctmlfI2T63h0Fqs,3896
|
2050
2050
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_internal/__init__.py,sha256=kqVXG7igSXSP_Gi4MzJPHoXaudlQV18A7U1qNEvXeMM,838
|
2051
2051
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_internal/aad_client.py,sha256=nDPSqqrFjtmm5xWLc7exa3aWxDvhwwge8yEZ__5ZtrQ,4260
|
2052
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_internal/decorators.py,sha256=
|
2052
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_internal/decorators.py,sha256=aw8JChj6khlmXPkjbMtypcvUgwfyIiUlUF1227nFREI,2940
|
2053
2053
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_internal/get_token_mixin.py,sha256=lcTyehjuQ3ztNNZHw6pGnE8AQgm-3fgpru1PzGyMTBg,7347
|
2054
2054
|
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_internal/managed_identity_base.py,sha256=-F_2QCSSM-WSk_BrGYV_6chvLeF-uZ0XOoANWK_HK84,2735
|
2055
|
-
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_internal/managed_identity_client.py,sha256=
|
2055
|
+
py2docfx/venv/venv1/Lib/site-packages/azure/identity/aio/_internal/managed_identity_client.py,sha256=5WhFml6NNwDWKWy60H_GfX34gedwgdk9ogxwl1bT_1A,1514
|
2056
2056
|
py2docfx/venv/venv1/Lib/site-packages/cachetools/__init__.py,sha256=8FSISszrQC5dE0HjoiivM7z9Azm8cEo3uX4rwzDdlf0,25557
|
2057
2057
|
py2docfx/venv/venv1/Lib/site-packages/cachetools/func.py,sha256=aOVfSkuNWMRADpkHZGK7LeJ_VZ8wljzbRwIAliOuhAg,3719
|
2058
2058
|
py2docfx/venv/venv1/Lib/site-packages/cachetools/keys.py,sha256=AOgfoi-oioBOnEEk115_9qs0HKISrYnbcV4F0hyZ1yk,1777
|
@@ -2089,7 +2089,7 @@ py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/utils.py,sha256=oH9Q3Wc
|
|
2089
2089
|
py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/version.py,sha256=7_thI7FzRQxEsbtUYwrJs3FCFWF666mw74H8mggPRR0,123
|
2090
2090
|
py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/cli/__init__.py,sha256=d9MUx-1V_qD3x9igIy4JT4oC5CU0yjulk7QyZWeRFhg,144
|
2091
2091
|
py2docfx/venv/venv1/Lib/site-packages/charset_normalizer/cli/__main__.py,sha256=lZ89qRWun7FRxX0qm1GhK-m0DH0i048yiMAX1mVIuRg,10731
|
2092
|
-
py2docfx/venv/venv1/Lib/site-packages/cryptography/__about__.py,sha256=
|
2092
|
+
py2docfx/venv/venv1/Lib/site-packages/cryptography/__about__.py,sha256=7_pvWpkU4M2C1cgTcHSQPw8Az1RaaIZ9nJ7gD7P4I30,445
|
2093
2093
|
py2docfx/venv/venv1/Lib/site-packages/cryptography/__init__.py,sha256=XsRL_PxbU6UgoyoglAgJQSrJCP97ovBA8YIEQ2-uI68,762
|
2094
2094
|
py2docfx/venv/venv1/Lib/site-packages/cryptography/exceptions.py,sha256=835EWILc2fwxw-gyFMriciC2SqhViETB10LBSytnDIc,1087
|
2095
2095
|
py2docfx/venv/venv1/Lib/site-packages/cryptography/fernet.py,sha256=aMU2HyDJ5oRGjg8AkFvHwE7BSmHY4fVUCaioxZcd8gA,6933
|
@@ -4193,7 +4193,7 @@ py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_addtas
|
|
4193
4193
|
py2docfx/venv/venv1/Lib/site-packages/win32comext/taskscheduler/test/test_localsystem.py,sha256=08ojAS48W6RLsUbRD45j0SJhg_Y2NFHZT6qjT4Vrig0,75
|
4194
4194
|
py2docfx/venv/venv1/Scripts/pywin32_postinstall.py,sha256=u95n7QQUxpCjrZistYE-3gN451zXzopuJna8cXRQ4Jw,28115
|
4195
4195
|
py2docfx/venv/venv1/Scripts/pywin32_testall.py,sha256=-6yvZmd2lPQc4e8i6PgLsr_totF6mScvoq0Jqr0V2fM,3844
|
4196
|
-
py2docfx-0.1.11.
|
4197
|
-
py2docfx-0.1.11.
|
4198
|
-
py2docfx-0.1.11.
|
4199
|
-
py2docfx-0.1.11.
|
4196
|
+
py2docfx-0.1.11.dev1989123.dist-info/METADATA,sha256=vCwJ-f8nckfA2IU-16BEVWPS0ykGLSIDCGRbTHQFGlE,601
|
4197
|
+
py2docfx-0.1.11.dev1989123.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
4198
|
+
py2docfx-0.1.11.dev1989123.dist-info/top_level.txt,sha256=5dH2uP81dczt_qQJ38wiZ-gzoVWasfiJALWRSjdbnYU,9
|
4199
|
+
py2docfx-0.1.11.dev1989123.dist-info/RECORD,,
|
File without changes
|
File without changes
|