Пример #1
0
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
Пример #2
0
    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)
Пример #6
0
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')