示例#1
0
    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)
示例#2
0
    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
示例#3
0
    def generate(self, profile_file, output_directory, ydk_root, groupings_as_class, generate_python):
        """
            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._perform_argument_checks(profile_file, output_directory, ydk_root)
        (ydk_dir, ydk_doc_dir) = self._get_ydk_paths(output_directory, ydk_root)
        resolved_model_dir = self._get_resolved_model_path_and_version(profile_file, ydk_root, ydk_dir)

        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)

        # call the language emitter
        language = ''
        if generate_python:
            language = 'python'
        printer = YdkPrinter(ydk_dir, ydk_doc_dir, language)
        printer.emit(packages, pyang_builder.submodules)
示例#4
0
    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)
示例#5
0
    def _get_packages(self, bundle):
        """ Return 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:
            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
示例#6
0
    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
示例#7
0
    def _get_api_pkgs(self, bundle):
        """ 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(bundle)
        modules = pyang_builder.parse_and_return_modules()

        # build api model packages
        if not self.groupings_as_class:
            api_pkgs = ApiModelBuilder().generate(modules)
        else:
            api_pkgs = GroupingClassApiModelBuilder().generate(modules)
        api_pkgs.extend(
            SubModuleBuilder().generate(pyang_builder.get_submodules()))

        return api_pkgs