From 3545cb906e324a2d40900aef3c3a7f14b9f5ab9c Mon Sep 17 00:00:00 2001 From: Charles Lowell Date: Fri, 12 Jun 2020 08:49:18 -0700 Subject: [PATCH] prevent exception on old versions of 3.6 --- sdk/identity/azure-identity/CHANGELOG.md | 5 ++++- .../azure/identity/_credentials/azure_cli.py | 7 ++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sdk/identity/azure-identity/CHANGELOG.md b/sdk/identity/azure-identity/CHANGELOG.md index f730b5ad7b52..2432ed284e24 100644 --- a/sdk/identity/azure-identity/CHANGELOG.md +++ b/sdk/identity/azure-identity/CHANGELOG.md @@ -1,6 +1,9 @@ # Release History -## 1.4.0b5 (Unreleased) +## 1.4.0b5 (2020-06-12) +- Prevent an error on importing `AzureCliCredential` on Windows caused by a bug + in old versions of Python 3.6 (this bug was fixed in Python 3.6.5). + ([#12014](https://github.com/Azure/azure-sdk-for-python/issues/12014)) - `SharedTokenCacheCredential.get_token` raises `ValueError` instead of `ClientAuthenticationError` when called with no scopes. ([#11553](https://github.com/Azure/azure-sdk-for-python/issues/11553)) diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/azure_cli.py b/sdk/identity/azure-identity/azure/identity/_credentials/azure_cli.py index 550e36fc1754..07687f8d32c1 100644 --- a/sdk/identity/azure-identity/azure/identity/_credentials/azure_cli.py +++ b/sdk/identity/azure-identity/azure/identity/_credentials/azure_cli.py @@ -26,9 +26,6 @@ COMMAND_LINE = "az account get-access-token --output json --resource {}" NOT_LOGGED_IN = "Please run 'az login' to set up an account" -# CLI's "expiresOn" is naive, so we use this naive datetime for the epoch to calculate expires_on in UTC -EPOCH = datetime.fromtimestamp(0) - class AzureCliCredential(object): """Authenticates by requesting a token from the Azure CLI. @@ -74,8 +71,8 @@ def parse_token(output): token = json.loads(output) parsed_expires_on = datetime.strptime(token["expiresOn"], "%Y-%m-%d %H:%M:%S.%f") - # calculate seconds since the epoch; parsed_expires_on and EPOCH are naive - expires_on = (parsed_expires_on - EPOCH).total_seconds() + # calculate seconds since the epoch; parsed_expires_on is naive + expires_on = (parsed_expires_on - datetime.fromtimestamp(0)).total_seconds() return AccessToken(token["accessToken"], int(expires_on)) except (KeyError, ValueError):