diff options
author | S. Solomon Darnell | 2025-03-28 21:52:21 -0500 |
---|---|---|
committer | S. Solomon Darnell | 2025-03-28 21:52:21 -0500 |
commit | 4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch) | |
tree | ee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/azure/core/credentials.py | |
parent | cc961e04ba734dd72309fb548a2f97d67d578813 (diff) | |
download | gn-ai-master.tar.gz |
Diffstat (limited to '.venv/lib/python3.12/site-packages/azure/core/credentials.py')
-rw-r--r-- | .venv/lib/python3.12/site-packages/azure/core/credentials.py | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/azure/core/credentials.py b/.venv/lib/python3.12/site-packages/azure/core/credentials.py new file mode 100644 index 00000000..355be4a0 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/azure/core/credentials.py @@ -0,0 +1,255 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See LICENSE.txt in the project root for +# license information. +# ------------------------------------------------------------------------- +from typing import Any, NamedTuple, Optional, TypedDict, Union, ContextManager +from typing_extensions import Protocol, runtime_checkable + + +class AccessToken(NamedTuple): + """Represents an OAuth access token.""" + + token: str + """The token string.""" + expires_on: int + """The token's expiration time in Unix time.""" + + +class AccessTokenInfo: + """Information about an OAuth access token. + + This class is an alternative to `AccessToken` which provides additional information about the token. + + :param str token: The token string. + :param int expires_on: The token's expiration time in Unix time. + :keyword str token_type: The type of access token. Defaults to 'Bearer'. + :keyword int refresh_on: Specifies the time, in Unix time, when the cached token should be proactively + refreshed. Optional. + """ + + token: str + """The token string.""" + expires_on: int + """The token's expiration time in Unix time.""" + token_type: str + """The type of access token.""" + refresh_on: Optional[int] + """Specifies the time, in Unix time, when the cached token should be proactively refreshed. Optional.""" + + def __init__( + self, + token: str, + expires_on: int, + *, + token_type: str = "Bearer", + refresh_on: Optional[int] = None, + ) -> None: + self.token = token + self.expires_on = expires_on + self.token_type = token_type + self.refresh_on = refresh_on + + def __repr__(self) -> str: + return "AccessTokenInfo(token='{}', expires_on={}, token_type='{}', refresh_on={})".format( + self.token, self.expires_on, self.token_type, self.refresh_on + ) + + +class TokenRequestOptions(TypedDict, total=False): + """Options to use for access token requests. All parameters are optional.""" + + claims: str + """Additional claims required in the token, such as those returned in a resource provider's claims + challenge following an authorization failure.""" + tenant_id: str + """The tenant ID to include in the token request.""" + enable_cae: bool + """Indicates whether to enable Continuous Access Evaluation (CAE) for the requested token.""" + + +@runtime_checkable +class TokenCredential(Protocol): + """Protocol for classes able to provide OAuth tokens.""" + + def get_token( + self, + *scopes: str, + claims: Optional[str] = None, + tenant_id: Optional[str] = None, + enable_cae: bool = False, + **kwargs: Any, + ) -> AccessToken: + """Request an access token for `scopes`. + + :param str scopes: The type of access needed. + + :keyword str claims: Additional claims required in the token, such as those returned in a resource + provider's claims challenge following an authorization failure. + :keyword str tenant_id: Optional tenant to include in the token request. + :keyword bool enable_cae: Indicates whether to enable Continuous Access Evaluation (CAE) for the requested + token. Defaults to False. + + :rtype: AccessToken + :return: An AccessToken instance containing the token string and its expiration time in Unix time. + """ + ... + + +@runtime_checkable +class SupportsTokenInfo(Protocol, ContextManager["SupportsTokenInfo"]): + """Protocol for classes able to provide OAuth access tokens with additional properties.""" + + def get_token_info(self, *scopes: str, options: Optional[TokenRequestOptions] = None) -> AccessTokenInfo: + """Request an access token for `scopes`. + + This is an alternative to `get_token` to enable certain scenarios that require additional properties + on the token. + + :param str scopes: The type of access needed. + :keyword options: A dictionary of options for the token request. Unknown options will be ignored. Optional. + :paramtype options: TokenRequestOptions + + :rtype: AccessTokenInfo + :return: An AccessTokenInfo instance containing information about the token. + """ + ... + + def close(self) -> None: + pass + + +TokenProvider = Union[TokenCredential, SupportsTokenInfo] + + +class AzureNamedKey(NamedTuple): + """Represents a name and key pair.""" + + name: str + key: str + + +__all__ = [ + "AzureKeyCredential", + "AzureSasCredential", + "AccessToken", + "AccessTokenInfo", + "SupportsTokenInfo", + "AzureNamedKeyCredential", + "TokenCredential", + "TokenRequestOptions", + "TokenProvider", +] + + +class AzureKeyCredential: + """Credential type used for authenticating to an Azure service. + It provides the ability to update the key without creating a new client. + + :param str key: The key used to authenticate to an Azure service + :raises: TypeError + """ + + def __init__(self, key: str) -> None: + if not isinstance(key, str): + raise TypeError("key must be a string.") + self._key = key + + @property + def key(self) -> str: + """The value of the configured key. + + :rtype: str + :return: The value of the configured key. + """ + return self._key + + def update(self, key: str) -> None: + """Update the key. + + This can be used when you've regenerated your service key and want + to update long-lived clients. + + :param str key: The key used to authenticate to an Azure service + :raises: ValueError or TypeError + """ + if not key: + raise ValueError("The key used for updating can not be None or empty") + if not isinstance(key, str): + raise TypeError("The key used for updating must be a string.") + self._key = key + + +class AzureSasCredential: + """Credential type used for authenticating to an Azure service. + It provides the ability to update the shared access signature without creating a new client. + + :param str signature: The shared access signature used to authenticate to an Azure service + :raises: TypeError + """ + + def __init__(self, signature: str) -> None: + if not isinstance(signature, str): + raise TypeError("signature must be a string.") + self._signature = signature + + @property + def signature(self) -> str: + """The value of the configured shared access signature. + + :rtype: str + :return: The value of the configured shared access signature. + """ + return self._signature + + def update(self, signature: str) -> None: + """Update the shared access signature. + + This can be used when you've regenerated your shared access signature and want + to update long-lived clients. + + :param str signature: The shared access signature used to authenticate to an Azure service + :raises: ValueError or TypeError + """ + if not signature: + raise ValueError("The signature used for updating can not be None or empty") + if not isinstance(signature, str): + raise TypeError("The signature used for updating must be a string.") + self._signature = signature + + +class AzureNamedKeyCredential: + """Credential type used for working with any service needing a named key that follows patterns + established by the other credential types. + + :param str name: The name of the credential used to authenticate to an Azure service. + :param str key: The key used to authenticate to an Azure service. + :raises: TypeError + """ + + def __init__(self, name: str, key: str) -> None: + if not isinstance(name, str) or not isinstance(key, str): + raise TypeError("Both name and key must be strings.") + self._credential = AzureNamedKey(name, key) + + @property + def named_key(self) -> AzureNamedKey: + """The value of the configured name. + + :rtype: AzureNamedKey + :return: The value of the configured name. + """ + return self._credential + + def update(self, name: str, key: str) -> None: + """Update the named key credential. + + Both name and key must be provided in order to update the named key credential. + Individual attributes cannot be updated. + + :param str name: The name of the credential used to authenticate to an Azure service. + :param str key: The key used to authenticate to an Azure service. + """ + if not isinstance(name, str) or not isinstance(key, str): + raise TypeError("Both name and key must be strings.") + self._credential = AzureNamedKey(name, key) |