Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package azure-cli-core for openSUSE:Factory checked in at 2022-02-14 22:36:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/azure-cli-core (Old) and /work/SRC/openSUSE:Factory/.azure-cli-core.new.1956 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "azure-cli-core" Mon Feb 14 22:36:14 2022 rev:34 rq:954192 version:2.33.0 Changes: -------- --- /work/SRC/openSUSE:Factory/azure-cli-core/azure-cli-core.changes 2022-01-14 23:14:57.566698273 +0100 +++ /work/SRC/openSUSE:Factory/.azure-cli-core.new.1956/azure-cli-core.changes 2022-02-14 22:37:12.565576028 +0100 @@ -1,0 +2,8 @@ +Fri Feb 11 10:32:28 UTC 2022 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- New upstream release + + Version 2.33.0 + + For detailed information about changes see the + HISTORY.rst file provided with this package + +------------------------------------------------------------------- Old: ---- azure-cli-core-2.32.0.tar.gz New: ---- azure-cli-core-2.33.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ azure-cli-core.spec ++++++ --- /var/tmp/diff_new_pack.rYMcUj/_old 2022-02-14 22:37:12.997577154 +0100 +++ /var/tmp/diff_new_pack.rYMcUj/_new 2022-02-14 22:37:13.005577175 +0100 @@ -17,7 +17,7 @@ Name: azure-cli-core -Version: 2.32.0 +Version: 2.33.0 Release: 0 Summary: Microsoft Azure CLI Core Module License: MIT ++++++ azure-cli-core-2.32.0.tar.gz -> azure-cli-core-2.33.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.32.0/HISTORY.rst new/azure-cli-core-2.33.0/HISTORY.rst --- old/azure-cli-core-2.32.0/HISTORY.rst 2021-12-31 09:05:11.000000000 +0100 +++ new/azure-cli-core-2.33.0/HISTORY.rst 2022-01-28 11:41:16.000000000 +0100 @@ -3,6 +3,10 @@ Release History =============== +2.33.0 +++++++ +* Drop `--query-examples` global argument (#20962) + 2.32.0 ++++++ * Use optimistic locking for service principal entry reads (#20408) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.32.0/PKG-INFO new/azure-cli-core-2.33.0/PKG-INFO --- old/azure-cli-core-2.32.0/PKG-INFO 2021-12-31 09:05:24.478523300 +0100 +++ new/azure-cli-core-2.33.0/PKG-INFO 2022-01-28 11:41:32.555424200 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: azure-cli-core -Version: 2.32.0 +Version: 2.33.0 Summary: Microsoft Azure Command-Line Tools Core Module Home-page: https://github.com/Azure/azure-cli Author: Microsoft Corporation diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.32.0/azure/cli/core/__init__.py new/azure-cli-core-2.33.0/azure/cli/core/__init__.py --- old/azure-cli-core-2.32.0/azure/cli/core/__init__.py 2021-12-31 09:05:11.000000000 +0100 +++ new/azure-cli-core-2.33.0/azure/cli/core/__init__.py 2022-01-28 11:41:16.000000000 +0100 @@ -4,7 +4,7 @@ # -------------------------------------------------------------------------------------------- # pylint: disable=line-too-long -__version__ = "2.32.0" +__version__ = "2.33.0" import os import sys @@ -65,7 +65,6 @@ from azure.cli.core.commands.transform import register_global_transforms from azure.cli.core._session import ACCOUNT, CONFIG, SESSION, INDEX, VERSIONS from azure.cli.core.util import handle_version_update - from azure.cli.core.commands.query_examples import register_global_query_examples_argument from knack.util import ensure_dir @@ -89,7 +88,6 @@ self.local_context = AzCLILocalContext(self) register_global_transforms(self) register_global_subscription_argument(self) - register_global_query_examples_argument(self) register_ids_argument(self) # global subscription must be registered first! register_cache_arguments(self) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.32.0/azure/cli/core/commands/query_examples.py new/azure-cli-core-2.33.0/azure/cli/core/commands/query_examples.py --- old/azure-cli-core-2.32.0/azure/cli/core/commands/query_examples.py 2021-12-31 09:05:11.000000000 +0100 +++ new/azure-cli-core-2.33.0/azure/cli/core/commands/query_examples.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,338 +0,0 @@ -# -------------------------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# -------------------------------------------------------------------------------------------- - -from knack.log import get_logger -from knack.util import todict -from knack import events -from knack.util import CLIError -from azure.cli.core.commands.events import EVENT_INVOKER_PRE_LOAD_ARGUMENTS - -logger = get_logger(__name__) - - -def register_global_query_examples_argument(cli_ctx): - """Register --query-examples argument, and register handler.""" - - def handle_example_parameter(cli, **kwargs): # pylint: disable=unused-argument - args = kwargs['args'] - # `query_examples` has been registered and `--query-examples` appers in the command args - if hasattr(args, '_query_examples') and args._query_examples is not None: # pylint: disable=protected-access - if cli_ctx.invocation.data['query_active']: - raise CLIError('You should not use --query and --query-examples together.') - # change the default output format to table - if cli_ctx.invocation.data['output'] == 'json': - cli_ctx.invocation.data['output'] = 'table' - - def analyze_output(cli_ctx, **kwargs): - tree_builder = QueryTreeBuilder(cli.config) - tree_builder.build(kwargs['event_data']['result']) - # replace the result with query examples - kwargs['event_data']['result'] = tree_builder.generate_examples( - args._query_examples, cli_ctx.invocation.data['output']) # pylint: disable=protected-access - cli_ctx.unregister_event( - events.EVENT_INVOKER_FILTER_RESULT, analyze_output) - - cli_ctx.register_event( - events.EVENT_INVOKER_FILTER_RESULT, analyze_output) - cli_ctx.invocation.data['query_active'] = True - - def register_query_examples(cli, **kwargs): - from knack.experimental import ExperimentalItem - experimental_info = ExperimentalItem(cli.local_context.cli_ctx, - object_type='parameter', target='_query_examples') - default_kwargs = { - 'help': 'Recommend JMESPath string for you. You can copy one of the query ' - 'and paste it after --query parameter within double quotation marks ' - 'to see the results. You can add one or more positional keywords so ' - 'that we can give suggestions based on these key words.', - 'arg_group': 'Global', - 'is_experimental': True, - 'nargs': '*', - 'experimental_info': experimental_info - } - - allow_list = cli.config.get('query', 'allow_list', "list,show").split(',') - allow_list = [s.strip() for s in allow_list if s.strip()] # remove empty string - # when allow_list="", do nothing - if not allow_list: - return - - commands_loader = kwargs.get('commands_loader') - cmd_tbl = commands_loader.command_table - for cmd_name, cmd in cmd_tbl.items(): - if any(cmd_name.endswith(suffix) for suffix in allow_list): - cmd.add_argument('_query_examples', * - ['--query-examples'], **default_kwargs) - - cli_ctx.register_event( - EVENT_INVOKER_PRE_LOAD_ARGUMENTS, register_query_examples - ) - cli_ctx.register_event( - events.EVENT_INVOKER_POST_PARSE_ARGS, handle_example_parameter) - - -class QueryExample: - def __init__(self, query_str, help_str="", max_length=None): - self._query_str = query_str - self._help_str = help_str - self._examples_len = max_length - self._help_len = max_length - self.escape_char() - - def set_max_length(self, examples_len, help_len): - self._examples_len = examples_len - self._help_len = help_len - - def escape_char(self): - """Escape special characters in JMESPath""" - # escape backtick - self._query_str = self._query_str.replace('`', '\\`') - - def _asdict(self): - query_str = self._query_str - if self._examples_len and len(query_str) > self._examples_len: - query_str = query_str[:self._examples_len] + '...' - help_str = self._help_str - if self._help_len and len(help_str) > self._help_len: - help_str = help_str[:self._help_len] + '...' - return {"query string": query_str, "help": help_str} - - def __str__(self): - return "{}\t{}".format(self._query_str, self._help_str) - - -class QueryTreeNode: - def __init__(self, name, parent, is_array): - self.is_dummy = False - self._name = name - self._parent = parent - self._is_array = is_array # inside an JSON array - self._data = None - self._child = [] # list of child node - - def add_child(self, child_node): - if child_node: - self._child.append(child_node) - - def update_node_data(self, data): - self._data = data - - def _get_one_data(self): - """Try to get not None data.""" - if not self._data: - return None - for value in self._data: - if value: - return value - return None - - def get_help_str(self, help_type): - """Return help string based on help_type.""" - help_table = { - 'contains': 'Show the {} field that contains given string.'.format(self._name), - 'filter': 'Show the resources that satisfy the condition.', - 'select': 'Show the value of {} field.'.format(self._name), - } - return help_table.get(help_type, '') - - def get_trace_to_array(self, inner_trace): - """ - Get trace to the nearest array. Return None if no array found. This function return two values, - inner trace and outer trace. The inner trace is the trace inside the brackets and the outer - trace is the trace outside the brackets. - """ - if self._is_array: - if self._parent: - if self._parent.is_dummy and not self._parent._is_array: # pylint: disable=protected-access - outer_trace = self._name - else: - outer_trace = '{}.{}'.format(self._parent.get_trace_to_root(), self._name) - else: - outer_trace = self._name - return outer_trace, inner_trace - - # under a dict - if self._parent: - if inner_trace: - current_trace = self._name + '.' + inner_trace - else: - current_trace = self._name - return self._parent.get_trace_to_array(current_trace) - - # no array found until root node - return None, None - - def get_trace_to_root(self): - """Return the trace string(aka, select string in JMESPath) to the root node.""" - if self._parent: - if self._parent.is_dummy and not self._parent._is_array: # pylint: disable=protected-access - trace_str = self._name - else: - trace_str = '{}.{}'.format(self._parent.get_trace_to_root(), self._name) - else: - trace_str = self._name - if self._is_array: - trace_str += '[]' - return trace_str - - def get_filter_str(self): - """Return the kind of JMESPath that filters the results with some conditions.""" - outer_trace, inner_trace = self.get_trace_to_array('') - if outer_trace is None or inner_trace is None: - return None - value = self._get_one_data() - if not value: - return None - filter_str = "{}[?{}=='{}']".format(outer_trace, inner_trace, value) - return filter_str - - def get_contains_str(self): - """Return the JMESPath that filter the results with a contains function.""" - outer_trace, inner_trace = self.get_trace_to_array('') - if outer_trace is None or inner_trace is None: - return None - value = self._get_one_data() - if not value: - return None - contains_str = "{0}[?contains(@.{1}, 'something')==`true`].{1}".format(outer_trace, inner_trace) - return contains_str - - def get_examples(self): - """The entry function for recommend examples for current node.""" - ans = [] - select_string = self.get_trace_to_root() - ans.append(QueryExample(select_string, self.get_help_str('select'))) - filter_str = self.get_filter_str() - if filter_str: - ans.append(QueryExample(filter_str, self.get_help_str('filter'))) - contains_str = self.get_contains_str() - if contains_str: - ans.append(QueryExample(contains_str, self.get_help_str('contains'))) - return ans - - -class QueryTreeBuilder: - """Parse entry. Generate parse tree from json. And then give examples.""" - - def __init__(self, config): - self._root = None # dummy root node - self._all_nodes = {} - self._config = {} - self.update_config(config) - - def build(self, data): - """Build a query tree with a given json file.""" - self._root = self._parse('', [data], None) - if self._root: - self._root.is_dummy = True - - def generate_examples(self, keywords_list, output_format): - """Generate JMESPath query string examples based on keyword_list.""" - examples = [] - match_list = self._get_matched_nodes(keywords_list) - for node_name in match_list: - if node_name: # skip root node - for node in self._all_nodes.get(node_name): - examples.extend(node.get_examples()) - if self._config['max_examples'] >= 0: - examples = examples[:self._config['max_examples']] - if output_format == 'table': - for item in examples: - item.set_max_length(self._config['examples_len'], self._config['help_len']) - return todict(examples) - - def update_config(self, config): - self._config['examples_len'] = int(config.get('query', 'examples_len', '80')) - self._config['help_len'] = int(config.get('query', 'help_len', '80')) - self._config['max_examples'] = int(config.get('query', 'max_examples', '10')) - - def _get_matched_nodes(self, keywords_list): - """ - Return a list of keys that match the user provided keywords. - Return all available keys if no keyword is provided. - """ - def name_match(pattern, line): - return pattern.lower() in line.lower() - - match_list = [] - # return all available key if no keyword is provided - if not keywords_list: - return self._all_nodes.keys() - - for pattern in keywords_list: - for node_name in self._all_nodes: - if node_name not in match_list and name_match(pattern, node_name): - match_list.append(node_name) - return match_list - - def _parse(self, name, data, parent, is_array=False): - """do parse for a single node - - :param str name: - Name of the node. - :param list data: - All data in the json with the same depth and the same name. - This field must be a list. - :param TreeNode parent: - The parent node of current node. None if this is the root node. - :param bool is_array: - True if the value of this JSON node is an array. - """ - if not data: - return None - if all(isinstance(d, list) for d in data): - node = self._parse_list(name, data, parent) - elif all(isinstance(d, dict) for d in data): - node = self._parse_dict(name, data, parent, is_array) - elif any(isinstance(d, (dict, list)) for d in data): - node = None # inhomogeneous type - else: - node = self._parse_leaf(name, data, parent, is_array) - return node - - def _parse_list(self, name, data, parent): - flatten_data = [] - # flatten list of list to list of data - for d in data: - flatten_data.extend(d) - if not flatten_data: - return None - node = self._parse(name, flatten_data, parent, is_array=True) - return node - - def _parse_leaf(self, name, data, parent, is_array): - node = QueryTreeNode(name, parent, is_array) - node.update_node_data(data) - self._record_node(name, node) - return node - - def _parse_dict(self, name, data, parent, is_array): - node = QueryTreeNode(name, parent, is_array) - all_keys = self._get_all_keys(data) - for key in all_keys: - values = self._get_not_none_values(data, key) - if not values: # all values are None - continue - child_node = self._parse(key, values, node, is_array=False) - node.add_child(child_node) - self._record_node(name, node) - return node - - def _get_all_keys(self, data): # pylint: disable=no-self-use - """Get all keys in a list of dict""" - return set().union(*(d.keys() for d in data)) - - def _get_not_none_values(self, data, key): # pylint: disable=no-self-use - """Get all not None values in a list of dict""" - return [d.get(key) for d in data if d.get(key, None) is not None] - - def _record_node(self, name, node): - """Add name and node to `self._all_nodes`""" - if not node: - return - if name in self._all_nodes: - self._all_nodes[name].append(node) - else: - self._all_nodes[name] = [node] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.32.0/azure/cli/core/profiles/_shared.py new/azure-cli-core-2.33.0/azure/cli/core/profiles/_shared.py --- old/azure-cli-core-2.32.0/azure/cli/core/profiles/_shared.py 2021-12-31 09:05:11.000000000 +0100 +++ new/azure-cli-core-2.33.0/azure/cli/core/profiles/_shared.py 2022-01-28 11:41:16.000000000 +0100 @@ -174,7 +174,7 @@ 'role_definitions': '2018-01-01-preview', 'provider_operations_metadata': '2018-01-01-preview' }), - ResourceType.MGMT_CONTAINERREGISTRY: SDKProfile('2021-06-01-preview', { + ResourceType.MGMT_CONTAINERREGISTRY: SDKProfile('2021-08-01-preview', { 'agent_pools': '2019-06-01-preview', 'tasks': '2019-06-01-preview', 'task_runs': '2019-06-01-preview', @@ -195,6 +195,7 @@ ResourceType.DATA_COSMOS_TABLE: '2017-04-17', ResourceType.MGMT_EVENTHUB: '2021-06-01-preview', ResourceType.MGMT_MONITOR: SDKProfile('2019-06-01', { + 'action_groups': '2021-09-01', 'activity_log_alerts': '2017-04-01', 'activity_logs': '2015-04-01', 'alert_rule_incidents': '2016-03-01', @@ -233,7 +234,7 @@ ResourceType.MGMT_ARO: '2020-04-30', ResourceType.MGMT_DATABOXEDGE: '2021-02-01-preview', ResourceType.MGMT_CUSTOMLOCATION: '2021-03-15-preview', - ResourceType.MGMT_CONTAINERSERVICE: SDKProfile('2021-07-01', { + ResourceType.MGMT_CONTAINERSERVICE: SDKProfile('2021-10-01', { 'container_services': '2017-07-01', 'open_shift_managed_clusters': '2019-09-30-preview' }) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.32.0/azure_cli_core.egg-info/PKG-INFO new/azure-cli-core-2.33.0/azure_cli_core.egg-info/PKG-INFO --- old/azure-cli-core-2.32.0/azure_cli_core.egg-info/PKG-INFO 2021-12-31 09:05:24.000000000 +0100 +++ new/azure-cli-core-2.33.0/azure_cli_core.egg-info/PKG-INFO 2022-01-28 11:41:32.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: azure-cli-core -Version: 2.32.0 +Version: 2.33.0 Summary: Microsoft Azure Command-Line Tools Core Module Home-page: https://github.com/Azure/azure-cli Author: Microsoft Corporation diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.32.0/azure_cli_core.egg-info/SOURCES.txt new/azure-cli-core-2.33.0/azure_cli_core.egg-info/SOURCES.txt --- old/azure-cli-core-2.32.0/azure_cli_core.egg-info/SOURCES.txt 2021-12-31 09:05:24.000000000 +0100 +++ new/azure-cli-core-2.33.0/azure_cli_core.egg-info/SOURCES.txt 2022-01-28 11:41:32.000000000 +0100 @@ -47,7 +47,6 @@ azure/cli/core/commands/events.py azure/cli/core/commands/parameters.py azure/cli/core/commands/progress.py -azure/cli/core/commands/query_examples.py azure/cli/core/commands/template_create.py azure/cli/core/commands/transform.py azure/cli/core/commands/validators.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.32.0/azure_cli_core.egg-info/requires.txt new/azure-cli-core-2.33.0/azure_cli_core.egg-info/requires.txt --- old/azure-cli-core-2.32.0/azure_cli_core.egg-info/requires.txt 2021-12-31 09:05:24.000000000 +0100 +++ new/azure-cli-core-2.33.0/azure_cli_core.egg-info/requires.txt 2022-01-28 11:41:32.000000000 +0100 @@ -14,4 +14,4 @@ PyJWT>=2.1.0 pyopenssl>=17.1.0 requests[socks] -psutil~=5.8 +psutil~=5.9 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-core-2.32.0/setup.py new/azure-cli-core-2.33.0/setup.py --- old/azure-cli-core-2.32.0/setup.py 2021-12-31 09:05:11.000000000 +0100 +++ new/azure-cli-core-2.33.0/setup.py 2022-01-28 11:41:16.000000000 +0100 @@ -8,7 +8,7 @@ from codecs import open from setuptools import setup, find_packages -VERSION = "2.32.0" +VERSION = "2.33.0" # If we have source, validate that our version numbers match # This should prevent uploading releases with mismatched versions. @@ -64,7 +64,7 @@ # dependencies for specific OSes if not sys.platform.startswith('cygwin'): - DEPENDENCIES.append('psutil~=5.8') + DEPENDENCIES.append('psutil~=5.9') with open('README.rst', 'r', encoding='utf-8') as f: