azdev/operations/command_change/util.py (57 lines of code) (raw):

# -------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- import json import os import re from enum import Enum import jsbeautifier from knack.log import get_logger logger = get_logger(__name__) SUBGROUP_NAME_PATTERN = re.compile(r"\[\'sub_groups\'\]\[\'([a-zA-Z0-9\-\s]+)\'\]") CMD_NAME_PATTERN = re.compile(r"\[\'commands\'\]\[\'([a-zA-Z0-9\-\s]+)\'\]") CMD_PARAMETER_PROPERTY_PATTERN = re.compile(r"\[(.*?)\]") class ChangeType(int, Enum): DEFAULT = 0 ADD = 1 CHANGE = 2 REMOVE = 3 def get_command_tree(command_name): """ input: monitor log-profiles create ret: { is_group: True, group_name: 'monitor', sub_info: { is_group: True, group_name: 'monitor log-profiles', sub_info: { is_group: False, cmd_name: 'monitor log-profiles create' } } } """ name_arr = command_name.split() ret = {} name_arr.reverse() for i, _ in enumerate(name_arr): tmp = {} if i == 0: tmp = { "is_group": False, "cmd_name": " ".join(name_arr[::-1]) } else: tmp = { "is_group": True, "group_name": " ".join(name_arr[len(name_arr): (i - 1): -1]), "sub_info": ret } ret = tmp return ret def export_commands_meta(commands_meta, meta_output_path=None): options = jsbeautifier.default_options() options.indent_size = 4 for key, module_info in commands_meta.items(): file_name = "az_" + key + "_meta.json" if meta_output_path: file_name = meta_output_path + "/" + file_name file_folder = os.path.dirname(file_name) if file_folder and not os.path.exists(file_folder): os.makedirs(file_folder) with open(file_name, "w") as f_out: f_out.write(jsbeautifier.beautify(json.dumps(module_info), options)) def add_to_command_tree(tree, key, value): parts = key.split() subtree = tree for part in parts[:-1]: if not subtree.get(part): subtree[part] = {} subtree = subtree[part] subtree[parts[-1]] = value def dump_command_tree(command_tree, output_file): with open(output_file, 'w', encoding='utf-8') as f: json.dump(command_tree, f, indent=4)