Hello community, here is the log from the commit of package azure-cli-core for openSUSE:Factory checked in at 2020-11-17 21:25:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/azure-cli-core (Old) and /work/SRC/openSUSE:Factory/.azure-cli-core.new.24930 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "azure-cli-core" Tue Nov 17 21:25:44 2020 rev:20 rq:848899 version:2.14.2 Changes: -------- --- /work/SRC/openSUSE:Factory/azure-cli-core/azure-cli-core.changes 2020-10-13 15:45:50.209454658 +0200 +++ /work/SRC/openSUSE:Factory/.azure-cli-core.new.24930/azure-cli-core.changes 2020-11-17 21:25:46.157406606 +0100 @@ -1,0 +2,8 @@ +Mon Nov 16 12:33:49 UTC 2020 - John Paul Adrian Glaubitz <[email protected]> + +- New upstream release + + Version 2.14.2 + + For detailed information about changes see the + HISTORY.rst file provided with this package + +------------------------------------------------------------------- Old: ---- azure-cli-core-2.13.0.tar.gz New: ---- azure-cli-core-2.14.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ azure-cli-core.spec ++++++ --- /var/tmp/diff_new_pack.a1LZML/_old 2020-11-17 21:25:46.737407181 +0100 +++ /var/tmp/diff_new_pack.a1LZML/_new 2020-11-17 21:25:46.737407181 +0100 @@ -17,7 +17,7 @@ Name: azure-cli-core -Version: 2.13.0 +Version: 2.14.2 Release: 0 Summary: Microsoft Azure CLI Core Module License: MIT ++++++ azure-cli-core-2.13.0.tar.gz -> azure-cli-core-2.14.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/HISTORY.rst new/azure-cli-core-2.14.2/HISTORY.rst --- old/azure-cli-core-2.13.0/HISTORY.rst 2020-10-12 09:58:16.000000000 +0200 +++ new/azure-cli-core-2.14.2/HISTORY.rst 2020-11-09 06:56:54.000000000 +0100 @@ -3,6 +3,18 @@ Release History =============== +2.14.2 +++++++ +* No changes + +2.14.1 +++++++ +* Minor fixes + +2.14.0 +++++++ +* Minor fixes + 2.13.0 ++++++ * Minor fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/PKG-INFO new/azure-cli-core-2.14.2/PKG-INFO --- old/azure-cli-core-2.13.0/PKG-INFO 2020-10-12 09:58:34.000000000 +0200 +++ new/azure-cli-core-2.14.2/PKG-INFO 2020-11-09 06:57:09.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: azure-cli-core -Version: 2.13.0 +Version: 2.14.2 Summary: Microsoft Azure Command-Line Tools Core Module Home-page: https://github.com/Azure/azure-cli Author: Microsoft Corporation @@ -15,6 +15,18 @@ Release History =============== + 2.14.2 + ++++++ + * No changes + + 2.14.1 + ++++++ + * Minor fixes + + 2.14.0 + ++++++ + * Minor fixes + 2.13.0 ++++++ * Minor fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/azure/cli/core/__init__.py new/azure-cli-core-2.14.2/azure/cli/core/__init__.py --- old/azure-cli-core-2.13.0/azure/cli/core/__init__.py 2020-10-12 09:58:16.000000000 +0200 +++ new/azure-cli-core-2.14.2/azure/cli/core/__init__.py 2020-11-09 06:56:54.000000000 +0100 @@ -6,7 +6,7 @@ from __future__ import print_function -__version__ = "2.13.0" +__version__ = "2.14.2" import os import sys @@ -35,7 +35,7 @@ # Modules that will always be loaded. They don't expose commands but hook into CLI core. ALWAYS_LOADED_MODULES = [] # Extensions that will always be loaded if installed. They don't expose commands but hook into CLI core. -ALWAYS_LOADED_EXTENSIONS = ['azext_ai_examples', 'azext_ai_did_you_mean_this'] +ALWAYS_LOADED_EXTENSIONS = ['azext_ai_examples'] class AzCli(CLI): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/azure/cli/core/_profile.py new/azure-cli-core-2.14.2/azure/cli/core/_profile.py --- old/azure-cli-core-2.13.0/azure/cli/core/_profile.py 2020-10-12 09:58:16.000000000 +0200 +++ new/azure-cli-core-2.14.2/azure/cli/core/_profile.py 2020-11-09 06:56:54.000000000 +0100 @@ -306,7 +306,6 @@ # pylint: disable=too-many-statements import jwt - from requests import HTTPError from msrestazure.tools import is_valid_resource_id from azure.cli.core.adal_authentication import MSIAuthenticationWrapper resource = self.cli_ctx.cloud.endpoints.active_directory_resource_id @@ -317,12 +316,13 @@ identity_type = MsiAccountTypes.user_assigned_resource_id else: authenticated = False + from azure.cli.core.azclierror import AzureResponseError try: msi_creds = MSIAuthenticationWrapper(resource=resource, client_id=identity_id) identity_type = MsiAccountTypes.user_assigned_client_id authenticated = True - except HTTPError as ex: - if ex.response.reason == 'Bad Request' and ex.response.status == 400: + except AzureResponseError as ex: + if 'http error: 400, reason: Bad Request' in ex.error_msg: logger.info('Sniff: not an MSI client id') else: raise @@ -332,8 +332,8 @@ identity_type = MsiAccountTypes.user_assigned_object_id msi_creds = MSIAuthenticationWrapper(resource=resource, object_id=identity_id) authenticated = True - except HTTPError as ex: - if ex.response.reason == 'Bad Request' and ex.response.status == 400: + except AzureResponseError as ex: + if 'http error: 400, reason: Bad Request' in ex.error_msg: logger.info('Sniff: not an MSI object id') else: raise @@ -1140,7 +1140,7 @@ 'authenticate through a service principal') if os.path.isfile(password_arg_value): certificate_file = password_arg_value - from OpenSSL.crypto import load_certificate, FILETYPE_PEM + from OpenSSL.crypto import load_certificate, FILETYPE_PEM, Error self.certificate_file = certificate_file self.public_certificate = None try: @@ -1154,7 +1154,7 @@ match = re.search(r'\-+BEGIN CERTIFICATE.+\-+(?P<public>[^-]+)\-+END CERTIFICATE.+\-+', self.cert_file_string, re.I) self.public_certificate = match.group('public').strip() - except UnicodeDecodeError: + except (UnicodeDecodeError, Error): raise CLIError('Invalid certificate, please use a valid PEM file.') else: self.secret = password_arg_value diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/azure/cli/core/adal_authentication.py new/azure-cli-core-2.14.2/azure/cli/core/adal_authentication.py --- old/azure-cli-core-2.13.0/azure/cli/core/adal_authentication.py 2020-10-12 09:58:16.000000000 +0200 +++ new/azure-cli-core-2.14.2/azure/cli/core/adal_authentication.py 2020-11-09 06:56:54.000000000 +0100 @@ -93,3 +93,27 @@ def get_token(self, *scopes, **kwargs): # pylint:disable=unused-argument self.set_token() return AccessToken(self.token['access_token'], int(self.token['expires_on'])) + + def set_token(self): + import traceback + from knack.log import get_logger + logger = get_logger(__name__) + from azure.cli.core.azclierror import AzureConnectionError, AzureResponseError + try: + super(MSIAuthenticationWrapper, self).set_token() + except requests.exceptions.ConnectionError as err: + logger.debug('throw requests.exceptions.ConnectionError when doing MSIAuthentication: \n%s', + traceback.format_exc()) + raise AzureConnectionError('Failed to connect to MSI. Please make sure MSI is configured correctly ' + 'and check the network connection.\nError detail: {}'.format(str(err))) + except requests.exceptions.HTTPError as err: + logger.debug('throw requests.exceptions.HTTPError when doing MSIAuthentication: \n%s', + traceback.format_exc()) + raise AzureResponseError('Failed to connect to MSI. Please make sure MSI is configured correctly.\n' + 'Get Token request returned http error: {}, reason: {}' + .format(err.response.status, err.response.reason)) + except TimeoutError as err: + logger.debug('throw TimeoutError when doing MSIAuthentication: \n%s', + traceback.format_exc()) + raise AzureConnectionError('MSI endpoint is not responding. Please make sure MSI is configured correctly.\n' + 'Error detail: {}'.format(str(err))) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/azure/cli/core/cloud.py new/azure-cli-core-2.14.2/azure/cli/core/cloud.py --- old/azure-cli-core-2.13.0/azure/cli/core/cloud.py 2020-10-12 09:58:16.000000000 +0200 +++ new/azure-cli-core-2.14.2/azure/cli/core/cloud.py 2020-11-09 06:56:54.000000000 +0100 @@ -163,42 +163,6 @@ return val -def _get_ossrdbms_resource_id(cloud_name): - ossrdbms_mapper = { - 'AzureCloud': 'https://ossrdbms-aad.database.windows.net', - 'AzureChinaCloud': 'https://ossrdbms-aad.database.chinacloudapi.cn', - 'AzureUSGovernment': 'https://ossrdbms-aad.database.usgovcloudapi.net', - 'AzureGermanCloud': 'https://ossrdbms-aad.database.cloudapi.de' - } - return ossrdbms_mapper.get(cloud_name, None) - - -def _get_microsoft_graph_resource_id(cloud_name): - graph_endpoint_mapper = { - 'AzureCloud': 'https://graph.microsoft.com/', - 'AzureChinaCloud': 'https://microsoftgraph.chinacloudapi.cn/', - 'AzureUSGovernment': 'https://graph.microsoft.us/', - 'AzureGermanCloud': 'https://graph.microsoft.de/' - } - return graph_endpoint_mapper.get(cloud_name, None) - - -def _get_storage_sync_endpoint(cloud_name): - storage_sync_endpoint_mapper = { - 'AzureCloud': 'afs.azure.net', - 'AzureUSGovernment': 'afs.azure.us', - } - return storage_sync_endpoint_mapper.get(cloud_name, None) - - -def _get_synapse_analytics_endpoint(cloud_name): - synapse_analytics_endpoint_mapper = { - 'AzureCloud': '.dev.azuresynapse.net', - 'AzureChinaCloud': '.dev.azuresynapse.azure.cn' - } - return synapse_analytics_endpoint_mapper.get(cloud_name, None) - - def _get_database_server_endpoint(sql_server_hostname, cloud_name): def _concat_db_server_endpoint(db_prefix): if cloud_name == 'AzureCloud': @@ -209,58 +173,18 @@ return _concat_db_server_endpoint -def _get_app_insights_telemetry_channel_resource_id(cloud_name): - app_insights_telemetry_channel_resource_id_mapper = { - 'AzureCloud': 'https://dc.applicationinsights.azure.com/v2/track', - 'AzureChinaCloud': 'https://dc.applicationinsights.azure.cn/v2/track', - 'AzureUSGovernment': 'https://dc.applicationinsights.us/v2/track' - } - return app_insights_telemetry_channel_resource_id_mapper.get(cloud_name, None) - - -def _get_log_analytics_resource_id(cloud_name): - log_analytics_resource_id_mapper = { - 'AzureCloud': 'https://api.loganalytics.io', - 'AzureChinaCloud': 'https://api.loganalytics.azure.cn', - 'AzureUSGovernment': 'https://api.loganalytics.us' - } - return log_analytics_resource_id_mapper.get(cloud_name, None) - - -def _get_app_insights_resource_id(cloud_name): - app_insights_resource_id_mapper = { - 'AzureCloud': 'https://api.applicationinsights.io', - 'AzureChinaCloud': 'https://api.applicationinsights.azure.cn', - 'AzureUSGovernment': 'https://api.applicationinsights.us' - } - return app_insights_resource_id_mapper.get(cloud_name, None) - - -def _get_synapse_analytics_resource_id(cloud_name): - synapse_analytics_resource_id_mapper = { - 'AzureCloud': 'https://dev.azuresynapse.net', - 'AzureChinaCloud': 'https://dev.azuresynapse.net' - } - return synapse_analytics_resource_id_mapper.get(cloud_name, None) - - -def _get_attestation_resource_id(cloud_name): - attestation_resource_id_mapper = { - 'AzureCloud': 'https://attest.azure.net' - } - return attestation_resource_id_mapper.get(cloud_name, None) - - -def _get_attestation_endpoint(cloud_name): - attestation_endpoint_mapper = { - 'AzureCloud': '.attest.azure.net' - } - return attestation_endpoint_mapper.get(cloud_name, None) - - -def _get_mhsm_dns_suffix(cloud_name): - mhsm_dns_suffix_mapper = {c.name: c.suffixes.mhsm_dns for c in HARD_CODED_CLOUD_LIST} - return mhsm_dns_suffix_mapper.get(cloud_name, None) +def _get_endpoint_fallback_value(cloud_name): + def _get_cloud_endpoint_fallback_value(endpoint_name): + endpoint_mapper = {c.name: c.endpoints.__dict__.get(endpoint_name, None) for c in HARD_CODED_CLOUD_LIST} + return endpoint_mapper.get(cloud_name, None) + return _get_cloud_endpoint_fallback_value + + +def _get_suffix_fallback_value(cloud_name): + def _get_cloud_suffix_fallback_value(suffix_name): + suffix_mapper = {c.name: c.suffixes.__dict__.get(suffix_name, None) for c in HARD_CODED_CLOUD_LIST} + return suffix_mapper.get(cloud_name, None) + return _get_cloud_suffix_fallback_value def _convert_arm_to_cli(arm_cloud_metadata_dict): @@ -291,42 +215,45 @@ sql_server_hostname = get_suffix('sqlServerHostname', add_dot=True) get_db_server_endpoint = _get_database_server_endpoint(sql_server_hostname, arm_dict['name']) + get_suffix_fallback_value = _get_suffix_fallback_value(arm_dict['name']) + get_endpoint_fallback_value = _get_endpoint_fallback_value(arm_dict['name']) + return Cloud( arm_dict['name'], - endpoints=CloudEndpoints( + endpoints=CloudEndpoints( # please add fallback_value if the endpoint is not added to https://management.azure.com/metadata/endpoints?api-version=2019-05-01 yet management=arm_dict['authentication']['audiences'][0], - resource_manager=arm_dict['resourceManager'], - sql_management=arm_dict['sqlManagement'], - batch_resource_id=arm_dict['batch'], - gallery=arm_dict['gallery'], + resource_manager=get_endpoint('resourceManager'), + sql_management=get_endpoint('sqlManagement'), + batch_resource_id=get_endpoint('batch'), + gallery=get_endpoint('gallery'), active_directory=arm_dict['authentication']['loginEndpoint'], active_directory_resource_id=arm_dict['authentication']['audiences'][0], - active_directory_graph_resource_id=arm_dict['graphAudience'], - microsoft_graph_resource_id=_get_microsoft_graph_resource_id(arm_dict['name']), # change once microsoft_graph_resource_id is fixed in ARM - vm_image_alias_doc=arm_dict['vmImageAliasDoc'], - media_resource_id=arm_dict['media'], - ossrdbms_resource_id=_get_ossrdbms_resource_id(arm_dict['name']), # change once ossrdbms_resource_id is available via ARM - active_directory_data_lake_resource_id=arm_dict['activeDirectoryDataLake'] if 'activeDirectoryDataLake' in arm_dict else None, - app_insights_resource_id=get_endpoint('appInsightsResourceId', fallback_value=_get_app_insights_resource_id(arm_dict['name'])), - log_analytics_resource_id=get_endpoint('logAnalyticsResourceId', fallback_value=_get_log_analytics_resource_id(arm_dict['name'])), - synapse_analytics_resource_id=get_endpoint('synapseAnalyticsResourceId', fallback_value=_get_synapse_analytics_resource_id(arm_dict['name'])), - app_insights_telemetry_channel_resource_id=get_endpoint('appInsightsTelemetryChannelResourceId', fallback_value=_get_app_insights_telemetry_channel_resource_id(arm_dict['name'])), - attestation_resource_id=get_endpoint('attestationResourceId', fallback_value=_get_attestation_resource_id(arm_dict['name'])), - portal=arm_dict['portal'] if 'portal' in arm_dict else None), + active_directory_graph_resource_id=get_endpoint('graphAudience'), + microsoft_graph_resource_id=get_endpoint('microsoftGraphResourceId', fallback_value=get_endpoint_fallback_value('microsoft_graph_resource_id')), # change once microsoft_graph_resource_id is fixed in ARM + vm_image_alias_doc=get_endpoint('vmImageAliasDoc'), + media_resource_id=get_endpoint('media'), + ossrdbms_resource_id=get_endpoint('ossrdbmsResourceId', fallback_value=get_endpoint_fallback_value('ossrdbms_resource_id')), # change once ossrdbms_resource_id is available via ARM + active_directory_data_lake_resource_id=get_endpoint('activeDirectoryDataLake'), + app_insights_resource_id=get_endpoint('appInsightsResourceId', fallback_value=get_endpoint_fallback_value('app_insights_resource_id')), + log_analytics_resource_id=get_endpoint('logAnalyticsResourceId', fallback_value=get_endpoint_fallback_value('log_analytics_resource_id')), + synapse_analytics_resource_id=get_endpoint('synapseAnalyticsResourceId', fallback_value=get_endpoint_fallback_value('synapse_analytics_resource_id')), + app_insights_telemetry_channel_resource_id=get_endpoint('appInsightsTelemetryChannelResourceId', fallback_value=get_endpoint_fallback_value('app_insights_telemetry_channel_resource_id')), + attestation_resource_id=get_endpoint('attestationResourceId', fallback_value=get_endpoint_fallback_value('attestation_resource_id')), + portal=get_endpoint('portal')), suffixes=CloudSuffixes( storage_endpoint=get_suffix('storage'), - storage_sync_endpoint=get_suffix('storageSyncEndpointSuffix', fallback_value=_get_storage_sync_endpoint(arm_dict['name'])), + storage_sync_endpoint=get_suffix('storageSyncEndpointSuffix', fallback_value=get_suffix_fallback_value('storage_sync_endpoint')), keyvault_dns=get_suffix('keyVaultDns', add_dot=True), - mhsm_dns=get_suffix('mhsmDns', add_dot=True, fallback_value=_get_mhsm_dns_suffix(arm_dict['name'])), + mhsm_dns=get_suffix('mhsmDns', add_dot=True, fallback_value=get_suffix_fallback_value('mhsm_dns')), sql_server_hostname=sql_server_hostname, mysql_server_endpoint=get_suffix('mysqlServerEndpoint', add_dot=True, fallback_value=get_db_server_endpoint('.mysql')), postgresql_server_endpoint=get_suffix('postgresqlServerEndpoint', add_dot=True, fallback_value=get_db_server_endpoint('.postgres')), mariadb_server_endpoint=get_suffix('mariadbServerEndpoint', add_dot=True, fallback_value=get_db_server_endpoint('.mariadb')), azure_datalake_store_file_system_endpoint=get_suffix('azureDataLakeStoreFileSystem'), azure_datalake_analytics_catalog_and_job_endpoint=get_suffix('azureDataLakeAnalyticsCatalogAndJob'), - synapse_analytics_endpoint=get_suffix('synapseAnalytics', add_dot=True, fallback_value=_get_synapse_analytics_endpoint(arm_dict['name'])), + synapse_analytics_endpoint=get_suffix('synapseAnalytics', add_dot=True, fallback_value=get_suffix_fallback_value('synapse_analytics_endpoint')), acr_login_server_endpoint=get_suffix('acrLoginServer', add_dot=True), - attestation_endpoint=get_suffix('attestationEndpoint', add_dot=True, fallback_value=_get_attestation_endpoint(arm_dict['name'])))) + attestation_endpoint=get_suffix('attestationEndpoint', add_dot=True, fallback_value=get_suffix_fallback_value('attestation_endpoint')))) class Cloud: # pylint: disable=too-few-public-methods diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/azure/cli/core/command_recommender.py new/azure-cli-core-2.14.2/azure/cli/core/command_recommender.py --- old/azure-cli-core-2.13.0/azure/cli/core/command_recommender.py 2020-10-12 09:58:16.000000000 +0200 +++ new/azure-cli-core-2.14.2/azure/cli/core/command_recommender.py 2020-11-09 06:56:54.000000000 +0100 @@ -251,7 +251,10 @@ if parameter_table: for argument in parameter_table.values(): options = argument.type.settings['options_list'] - options = (option for option in options if not isinstance(option, Deprecated)) + options = [option for option in options if not isinstance(option, Deprecated)] + # skip the positional arguments + if not options: + continue try: sorted_options = sorted(options, key=len, reverse=True) standard_form = sorted_options[0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/azure/cli/core/parser.py new/azure-cli-core-2.14.2/azure/cli/core/parser.py --- old/azure-cli-core-2.13.0/azure/cli/core/parser.py 2020-10-12 09:58:16.000000000 +0200 +++ new/azure-cli-core-2.14.2/azure/cli/core/parser.py 2020-11-09 06:56:54.000000000 +0100 @@ -223,7 +223,7 @@ def enable_autocomplete(self): argcomplete.autocomplete = AzCompletionFinder() argcomplete.autocomplete(self, validator=lambda c, p: c.lower().startswith(p.lower()), - default_completer=lambda _: ()) + default_completer=lambda *args, **kwargs: ()) def _get_failure_recovery_arguments(self, action=None): # Strip the leading "az " and any extraneous whitespace. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/azure/cli/core/profiles/_shared.py new/azure-cli-core-2.14.2/azure/cli/core/profiles/_shared.py --- old/azure-cli-core-2.13.0/azure/cli/core/profiles/_shared.py 2020-10-12 09:58:16.000000000 +0200 +++ new/azure-cli-core-2.14.2/azure/cli/core/profiles/_shared.py 2020-11-09 06:56:54.000000000 +0100 @@ -143,7 +143,7 @@ 'disk_accesses': '2020-05-01', 'snapshots': '2020-05-01', 'galleries': '2019-12-01', - 'gallery_images': '2019-12-01', + 'gallery_images': '2020-09-30', 'gallery_image_versions': '2019-12-01', 'virtual_machine_scale_sets': '2020-06-01' }), @@ -169,7 +169,7 @@ ResourceType.DATA_KEYVAULT_ADMINISTRATION_ACCESS_CONTROL: '7.2-preview', ResourceType.DATA_STORAGE: '2018-11-09', ResourceType.DATA_STORAGE_BLOB: '2019-12-12', - ResourceType.DATA_STORAGE_FILEDATALAKE: '2018-11-09', + ResourceType.DATA_STORAGE_FILEDATALAKE: '2020-02-10', ResourceType.DATA_STORAGE_FILESHARE: '2019-07-07', ResourceType.DATA_STORAGE_QUEUE: '2018-03-28', ResourceType.DATA_COSMOS_TABLE: '2017-04-17', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/azure/cli/core/telemetry.py new/azure-cli-core-2.14.2/azure/cli/core/telemetry.py --- old/azure-cli-core-2.13.0/azure/cli/core/telemetry.py 2020-10-12 09:58:16.000000000 +0200 +++ new/azure-cli-core-2.14.2/azure/cli/core/telemetry.py 2020-11-09 06:56:54.000000000 +0100 @@ -22,6 +22,10 @@ AZURE_CLI_PREFIX = 'Context.Default.AzureCLI.' DEFAULT_INSTRUMENTATION_KEY = 'c4395b75-49cc-422c-bc95-c7d51aef5d46' CORRELATION_ID_PROP_NAME = 'Reserved.DataModel.CorrelationId' +# Put a config section or key (section.name) in the allowed set to allow recording the config +# values in the section or for the key with 'az config set' +ALLOWED_CONFIG_SECTIONS_OR_KEYS = {'auto-upgrade', 'extension', 'core', 'logging.enable_log_file', + 'output.show_survey_link'} class TelemetrySession: # pylint: disable=too-many-instance-attributes @@ -136,6 +140,7 @@ 'Context.Default.VS.Core.Machine.Id': _get_hash_machine_id(), 'Context.Default.VS.Core.OS.Type': platform.system().lower(), # eg. darwin, windows 'Context.Default.VS.Core.OS.Version': platform.version().lower(), # eg. 10.0.14942 + 'Context.Default.VS.Core.OS.Platform': platform.platform().lower(), # eg. windows-10-10.0.19041-sp0 'Context.Default.VS.Core.User.Id': _get_installation_id(), 'Context.Default.VS.Core.User.IsMicrosoftInternal': 'False', 'Context.Default.VS.Core.User.IsOptedIn': 'True', @@ -343,11 +348,26 @@ @decorators.suppress_all_exceptions() def set_debug_info(key, info): + if key == 'ConfigSet': + info = _process_config_set_debug_info(info) + debug_info = '{}: {}'.format(key, info) _session.debug_info.append(debug_info) @decorators.suppress_all_exceptions() +def _process_config_set_debug_info(info): + processed_info = [] + # info is a list of tuples + for key, section, value in info: + if section in ALLOWED_CONFIG_SECTIONS_OR_KEYS or key in ALLOWED_CONFIG_SECTIONS_OR_KEYS: + processed_info.append('{}={}'.format(key, value)) + else: + processed_info.append('{}={}'.format(key, '***' if value else value)) + return ' '.join(processed_info) + + [email protected]_all_exceptions() def set_application(application, arg_complete_env_name): _session.application, _session.arg_complete_env_name = application, arg_complete_env_name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/azure/cli/core/util.py new/azure-cli-core-2.14.2/azure/cli/core/util.py --- old/azure-cli-core-2.13.0/azure/cli/core/util.py 2020-10-12 09:58:16.000000000 +0200 +++ new/azure-cli-core-2.14.2/azure/cli/core/util.py 2020-11-09 06:56:54.000000000 +0100 @@ -61,7 +61,7 @@ from azure.cli.core.azlogging import CommandLoggerContext from azure.common import AzureException from azure.core.exceptions import AzureError - from requests.exceptions import SSLError + from requests.exceptions import SSLError, HTTPError import azure.cli.core.azclierror as azclierror import traceback @@ -125,6 +125,11 @@ AzCLIErrorType = get_error_type_by_status_code(status_code) az_error = AzCLIErrorType(error_msg) + elif isinstance(ex, HTTPError): + status_code = str(getattr(ex.response, 'status_code', 'Unknown Code')) + AzCLIErrorType = get_error_type_by_status_code(status_code) + az_error = AzCLIErrorType(error_msg) + elif isinstance(ex, KeyboardInterrupt): error_msg = 'Keyboard interrupt is captured.' az_error = azclierror.ManualInterrupt(error_msg) @@ -211,7 +216,7 @@ if status_code.startswith('5'): return azclierror.AzureInternalError - return azclierror.AzureResponseError + return azclierror.UnknownError def is_azure_connection_error(error_msg): @@ -791,7 +796,7 @@ skip_authorization_header = True # Handle User-Agent - agents = [get_az_user_agent()] + agents = [get_az_rest_user_agent()] # Borrow AZURE_HTTP_USER_AGENT from msrest # https://github.com/Azure/msrest-for-python/blob/4cc8bc84e96036f03b34716466230fb257e27b36/msrest/pipeline/universal.py#L70 @@ -1076,6 +1081,17 @@ return ' '.join(agents) + +def get_az_rest_user_agent(): + """Get User-Agent for az rest calls""" + + agents = ['python/{}'.format(platform.python_version()), + '({})'.format(platform.platform()), + get_az_user_agent() + ] + + return ' '.join(agents) + def user_confirmation(message, yes=False): if yes: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/azure_cli_core.egg-info/PKG-INFO new/azure-cli-core-2.14.2/azure_cli_core.egg-info/PKG-INFO --- old/azure-cli-core-2.13.0/azure_cli_core.egg-info/PKG-INFO 2020-10-12 09:58:34.000000000 +0200 +++ new/azure-cli-core-2.14.2/azure_cli_core.egg-info/PKG-INFO 2020-11-09 06:57:09.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: azure-cli-core -Version: 2.13.0 +Version: 2.14.2 Summary: Microsoft Azure Command-Line Tools Core Module Home-page: https://github.com/Azure/azure-cli Author: Microsoft Corporation @@ -15,6 +15,18 @@ Release History =============== + 2.14.2 + ++++++ + * No changes + + 2.14.1 + ++++++ + * Minor fixes + + 2.14.0 + ++++++ + * Minor fixes + 2.13.0 ++++++ * Minor fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.13.0/setup.py new/azure-cli-core-2.14.2/setup.py --- old/azure-cli-core-2.13.0/setup.py 2020-10-12 09:58:16.000000000 +0200 +++ new/azure-cli-core-2.14.2/setup.py 2020-11-09 06:56:54.000000000 +0100 @@ -9,7 +9,7 @@ from codecs import open from setuptools import setup -VERSION = "2.13.0" +VERSION = "2.14.2" # If we have source, validate that our version numbers match # This should prevent uploading releases with mismatched versions. _______________________________________________ openSUSE Commits mailing list -- [email protected] To unsubscribe, email [email protected] List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette List Archives: https://lists.opensuse.org/archives/list/[email protected]
