src/aaz_dev/swagger/api/_cmds.py (54 lines of code) (raw):

import click import logging from flask import Blueprint import os import json from utils.config import Config logger = logging.getLogger('backend') bp = Blueprint('swagger-cmds', __name__, url_prefix='/Swagger/CMDs', cli_group="swagger") bp.cli.short_help = "Manage azure-rest-api-specs/azure-rest-api-specs-pr repos." @bp.cli.command("export-resources", short_help="Export all control plane resources in swagger repo") @click.option( "--swagger-path", '-s', type=click.Path(file_okay=False, dir_okay=True, readable=True, resolve_path=True), default=Config.SWAGGER_PATH, required=not Config.SWAGGER_PATH, callback=Config.validate_and_setup_swagger_path, expose_value=False, help="The local path of azure-rest-api-specs repo. Official repo is https://github.com/Azure/azure-rest-api-specs" ) @click.option( "--output-file", '-o', type=click.Path(file_okay=True, dir_okay=False, resolve_path=True), help="The file name for result output", ) def export_swagger_control_plane_resources(output_file): logger.setLevel(level=logging.CRITICAL) from swagger.controller.specs_manager import SwaggerSpecsManager from utils.plane import PlaneEnum if output_file and os.path.exists(output_file): print(f"The output file {output_file} exists. Do you want to override it? (Y/N):", end='') if input().lower() != 'y': print("Exit without overriding.") return result = {} swagger_specs = SwaggerSpecsManager() for module in swagger_specs.get_modules(PlaneEnum.Mgmt): for rp in module.get_resource_providers(): if rp.name.lower() not in result: result[rp.name.lower()] = {} resource_map = result[rp.name.lower()] for resource_id, version_map in rp.get_resource_map().items(): if resource_id not in resource_map: resource_map[resource_id] = set() resource_map[resource_id].update([version for version in version_map]) for rp, resource_map in result.items(): for resource in resource_map: assert None not in resource_map[resource] resource_map[resource] = sorted(resource_map[resource]) if output_file is None: print(json.dumps(result, ensure_ascii=True, sort_keys=True, indent=2)) else: with open(output_file, 'w') as f: json.dump(result, f, ensure_ascii=True, sort_keys=True, indent=2) print(f'Export output in {output_file} success.')