def _get_api_pkgs(self, resolved_model_dir): """ Return api packages for resolved YANG modules. Each module will be represented as an api package. Args: resolved_model_dir (str): Path to resolved YANG modules. Returns: api_pkgs (List[.api_model.Package]): List of api packages. """ pyang_builder = PyangModelBuilder(resolved_model_dir) modules = pyang_builder.parse_and_return_modules() # build api model packages if not self.groupings_as_class: api_pkgs = ApiModelBuilder(self.iskeyword, self.language).generate(modules) else: api_pkgs = GroupingClassApiModelBuilder( self.iskeyword, self.language).generate(modules) api_pkgs.extend(SubModuleBuilder().generate( pyang_builder.get_submodules(), self.iskeyword)) return api_pkgs
def generate(self, profile_file, output_directory, ydk_root, groupings_as_class, language): """ Generate ydk-py based in the output_directory using the supplied profile_file :param str profile_file: The profile file to use :param str output_directory: The output directory where the generated ydk python code will be created. :param str ydk_root: The ydk root directory. Relative file names in the profile file are resolved relative to this. :param bool groupings_as_class: If set to true YANG grouping is converted to a class. :raise YdkGenException: if an error has occurred """ self.language = language if language != 'cpp' and language != 'python': raise YdkGenException( 'Language {0} not supported'.format(language)) ydk_directory = self._get_ydk_directory(output_directory, language) self._perform_argument_checks(profile_file, output_directory, ydk_root) self._create_ydk_directories(output_directory, ydk_root, language) resolved_model_dir = self._get_resolved_model_dir( profile_file, ydk_root, ydk_directory) pyang_builder = PyangModelBuilder(resolved_model_dir) modules = pyang_builder.parse_and_return_modules() # create the packages packages = self._build_api_model_packages(modules, groupings_as_class) packages.extend(SubModuleBuilder().generate( pyang_builder.get_submodules())) # call the language emitter printer = printer_factory.PrinterFactory().get_printer(language)( ydk_directory) printer.emit(packages)
def _get_packages(self, bundle): """ Return packages for resolved YANG modules. Each module will be represented as an api package. Args: bundle (Bundle): Bundle package. Returns: packages (List[.api_model.Package]): List of api packages. """ resolved_model_dir = bundle.resolved_models_dir pyang_builder = PyangModelBuilder(resolved_model_dir) modules = pyang_builder.parse_and_return_modules() # build api model packages packages = ApiModelBuilder(self.iskeyword, self.language, bundle.name).generate(modules) packages.extend(SubModuleBuilder().generate( pyang_builder.get_submodules(), self.iskeyword, self.language, bundle.name)) return packages