def populate_dicts(component_svc, enumeration_dict, structure_dict, service_dict, service_urls_map, base_url, generate_metamodel): components = component_svc.list() for component in components: component_data = component_svc.get(component) if generate_metamodel: if not os.path.exists('metamodel'): os.mkdir('metamodel') utils.write_json_data_to_file('metamodel/' + component + '.json', objectTodict(component_data)) component_packages = component_data.info.packages for package in component_packages: package_info = component_packages.get(package) for enumeration, enumeration_info in package_info.enumerations.items( ): enumeration_dict[enumeration] = enumeration_info for structure, structure_info in package_info.structures.items(): structure_dict[structure] = structure_info for enum_name, enum_info in structure_info.enumerations.items( ): enumeration_dict[enum_name] = enum_info for service, service_info in package_info.services.items(): service_dict[service] = service_info service_urls_map[get_service_url_from_service_id( base_url, service)] = service for structure_name, structure_info in service_info.structures.items( ): structure_dict[structure_name] = structure_info for et1, et_info1 in structure_info.enumerations.items(): enumeration_dict[et1] = et_info1 for enum_name, enum_info in service_info.enumerations.items(): enumeration_dict[enum_name] = enum_info
def process_output( self, path_dict, type_dict, output_dir, output_filename, gen_unique_op_id, prefix=''): description_map = utils.load_description() file_prefix = '' if prefix != '': file_prefix = prefix + "_" swagger_template = { 'swagger': '2.0', 'info': { 'description': description_map.get( output_filename, ''), 'title': utils.remove_curly_braces(output_filename), 'version': '2.0.0'}, 'host': '<vcenter>', 'securityDefinitions': { 'basic_auth': { 'type': 'basic'}}, 'basePath': '', 'produces': [ 'application/json' ], "consumes": [ "application/json" ], 'tags': [], 'schemes': [ 'https', 'http'], 'paths': collections.OrderedDict( sorted( path_dict.items())), 'definitions': collections.OrderedDict( sorted( type_dict.items()))} if not os.path.exists(output_dir): os.mkdir(output_dir) utils.write_json_data_to_file( output_dir + os.path.sep + file_prefix + utils.remove_curly_braces(output_filename) + '.json', swagger_template)
def process_output( self, path_dict, type_dict, output_dir, output_filename, gen_unique_op_id): description_map = utils.load_description() self.remove_com_vmware_from_dict(path_dict) if gen_unique_op_id: self.create_unique_op_ids(path_dict) self.remove_query_params(path_dict) self.remove_com_vmware_from_dict(type_dict) swagger_template = { 'swagger': '2.0', 'info': { 'description': description_map.get( output_filename, ''), 'title': utils.remove_curly_braces(output_filename), 'version': '2.0.0'}, 'host': '<vcenter>', 'securityDefinitions': { 'basic_auth': { 'type': 'basic'}}, 'basePath': '/rest', 'tags': [], 'schemes': [ 'https', 'http'], 'paths': collections.OrderedDict( sorted( path_dict.items())), 'definitions': collections.OrderedDict( sorted( type_dict.items()))} if not os.path.exists(output_dir): os.mkdir(output_dir) utils.write_json_data_to_file( output_dir + os.path.sep + '/rest' + "_" + utils.remove_curly_braces(output_filename) + '.json', swagger_template)
def process_output( self, path_dict, type_dict, output_dir, output_filename, gen_unique_op_id, prefix=''): reqBody = {} description_map = utils.load_description() if 'requestBodies' in type_dict: self.remove_com_vmware_from_dict(type_dict['requestBodies']) reqBody = collections.OrderedDict( sorted(type_dict['requestBodies'].items())) file_prefix = '' if prefix != '': file_prefix = prefix + "_" swagger_template = { 'openapi': '3.0.0', 'info': { 'description': description_map.get(output_filename, ''), 'title': utils.remove_curly_braces(output_filename), 'version': '2.0.0'}, 'paths': collections.OrderedDict(sorted(path_dict.items())), 'components': { 'requestBodies': reqBody}} if 'requestBodies' in type_dict: del type_dict['requestBodies'] swagger_template['components']['schemas'] = collections.OrderedDict( sorted(type_dict.items())) if not os.path.exists(output_dir): os.mkdir(output_dir) utils.write_json_data_to_file( output_dir + os.path.sep + file_prefix + utils.remove_curly_braces(output_filename) + '.json', swagger_template)
def __produce_api_json(self): # api.json contains list of packages which is used by UI to dynamically # populate dropdown. api_files_list = [] for name in list(self.rest_package_spec_dict.keys()): if self.split_api_rest: api_files_list.append("rest_" + name) else: api_files_list.append(name) for name in list(self.api_package_spec_dict.keys()): if self.split_api_rest: api_files_list.append("api_" + name) else: api_files_list.append(name) api_files_list = list(set(api_files_list)) api_files = {'files': api_files_list} utils.write_json_data_to_file( self.output_dir + os.path.sep + 'api.json', api_files)
def main(): # Get user input. metadata_api_url, rest_navigation_url, output_dir, verify, enable_filtering, GENERATE_METAMODEL, SPECIFICATION, GENERATE_UNIQUE_OP_IDS, TAG_SEPARATOR = connection.get_input_params() # Maps enumeration id to enumeration info enumeration_dict = {} # Maps structure_id to structure_info structure_dict = {} # Maps service_id to service_info service_dict = {} # Maps service url to service id service_urls_map = {} start = timeit.default_timer() print('Trying to connect ' + metadata_api_url) session = requests.session() session.verify = False connector = get_requests_connector(session, url=metadata_api_url) if not enable_filtering: connector.set_application_context( ApplicationContext({SHOW_UNRELEASED_APIS: "True"})) print('Connected to ' + metadata_api_url) component_svc = connection.get_component_service(connector) dict_processing.populate_dicts( component_svc, enumeration_dict, structure_dict, service_dict, service_urls_map, rest_navigation_url, GENERATE_METAMODEL) if enable_filtering: service_urls_map = dict_processing.get_service_urls_from_rest_navigation( rest_navigation_url, verify) http_error_map = utils.HttpErrorMap(component_svc) # package_dict_api holds list of all service urls which come under /api package_dict_api, package_dict = dict_processing.add_service_urls_using_metamodel( service_urls_map, service_dict, rest_navigation_url) rest = RestUrlProcessing() api = ApiUrlProcessing() threads = [] for package, service_urls in six.iteritems(package_dict): worker = threading.Thread( target=rest.process_service_urls, args=( package, service_urls, output_dir, structure_dict, enumeration_dict, service_dict, service_urls_map, http_error_map, rest_navigation_url, enable_filtering, SPECIFICATION, GENERATE_UNIQUE_OP_IDS)) worker.daemon = True worker.start() threads.append(worker) for package, service_urls in six.iteritems(package_dict_api): worker = threading.Thread( target=api.process_service_urls, args=( package, service_urls, output_dir, structure_dict, enumeration_dict, service_dict, service_urls_map, http_error_map, rest_navigation_url, enable_filtering, SPECIFICATION, GENERATE_UNIQUE_OP_IDS)) worker.daemon = True worker.start() threads.append(worker) for worker in threads: worker.join() # api.json contains list of packages which is used by UI to dynamically # populate dropdown. api_files_list = [] for name in list(package_dict.keys()): api_files_list.append("rest_" + name) for name in list(package_dict_api.keys()): api_files_list.append("api_" + name) api_files = {'files': api_files_list} utils.write_json_data_to_file( output_dir + os.path.sep + 'api.json', api_files) stop = timeit.default_timer() print('Generated swagger files at ' + output_dir + ' for ' + metadata_api_url + ' in ' + str(stop - start) + ' seconds')