def version_diff()

in azure-cli-diff-tool/azure_cli_diff_tool/__init__.py [0:0]


def version_diff(base_version, diff_version, only_break=False, version_diff_file=None, use_cache=False,
                 output_type="dict", target_module=None):
    config = load_blob_config_file()
    blob_url, path_prefix, index_file = get_blob_config(config)
    download_base_start = time.time()
    if target_module:
        base_version_module_list = get_target_version_module(blob_url, path_prefix, base_version,
                                                             target_module, use_cache)
    else:
        base_version_module_list = get_target_version_modules(blob_url, path_prefix, index_file, base_version, use_cache)
    download_base_end = time.time()
    logger.info("base version {} meta files download using {} sec".format(base_version,
                                                                          download_base_end - download_base_start))
    if target_module:
        get_target_version_module(blob_url, path_prefix, diff_version,
                                  target_module, use_cache)
    else:
        get_target_version_modules(blob_url, path_prefix, index_file, diff_version, use_cache)
    download_target_end = time.time()
    logger.info("diff version {} meta files download using {} sec".format(diff_version,
                                                                          download_target_end - download_base_end))
    version_diffs = []
    for _, base_meta_file_full_path, base_meta_file in base_version_module_list:
        module_name = extract_module_name_from_meta_file(base_meta_file)
        if not module_name:
            continue
        if target_module and module_name != target_module:
            continue
        diff_meta_file_full_path = os.path.join(os.getcwd(), path_prefix + diff_version, base_meta_file)
        if not os.path.exists(diff_meta_file_full_path):
            print(f"Module {module_name} removed for {diff_version}")
            continue
        with open(base_meta_file_full_path, "r") as g:
            command_tree_before = json.load(g)
        with open(diff_meta_file_full_path, "r") as g:
            command_tree_after = json.load(g)

        if command_tree_before.get("compat_version", None) \
                and check_meta_tool_compatibility(command_tree_before["compat_version"]):
            raise Exception("Please update your azure cli diff tool")
        if command_tree_after.get("compat_version", None) \
                and check_meta_tool_compatibility(command_tree_after["compat_version"]):
            raise Exception("Please update your azure cli diff tool")
        expand_deprecate_obj(command_tree_before)
        expand_deprecate_obj(command_tree_after)
        diff = DeepDiff(command_tree_before, command_tree_after)
        if not diff:
            print(f"No meta diffs from version: {diff_version}/{base_meta_file} for module: {module_name}")
            continue
        detected_changes = MetaChangeDetect(diff, command_tree_before, command_tree_after)
        detected_changes.check_deep_diffs()
        diff_objs = detected_changes.export_meta_changes(only_break, "dict")
        mod_obj = {"module": module_name}
        for obj in diff_objs:
            obj.update(mod_obj)
            version_diffs.append(obj)
    meta_change_end = time.time()
    logger.info("meta file diffs using {} sec".format(meta_change_end - download_target_end))
    if output_type == "dict":
        return export_meta_changes_to_dict(version_diffs, version_diff_file)
    return export_meta_changes_to_csv(version_diffs, version_diff_file)