예제 #1
0
    def _create_default_templates(self, options: CombinedOptions):
        """
        Copy default templates to project dir if their names in options are
        same as default.
        """

        if options.is_default('doc_template'):
            source = self.project_path / options['doc_template']
            to_copy = resource_filename(
                __name__, f"templates/{options.defaults['doc_template']}")
            copy_if_not_exists(source, to_copy)

        if options.is_default('scheme_template'):
            source = self.project_path / options['scheme_template']
            to_copy = resource_filename(
                __name__, f"templates/{options.defaults['scheme_template']}")
            copy_if_not_exists(source, to_copy)
    def _process_jinja(self, spec: PosixPath, options: CombinedOptions) -> str:
        """Process dbml spec with jinja and return the resulting string"""
        data = PyDBML(spec)
        result = ''

        if options['doc']:
            if options.is_default('template') and not Path(
                    options['template']).exists():
                # copy default template to project dir if it's doesn't exist there
                copyfile(
                    resource_filename(__name__,
                                      'template/' + self.defaults['template']),
                    options['template'])
            try:
                template = self._env.get_template(str(options['template']))
                result += template.render(data=data)
            except Exception as e:
                self._warning(
                    f'\nFailed to render doc template {options["template"]}',
                    error=e)
                return result

        if options['scheme']:
            if options.is_default('scheme_template') and\
                    not Path(options['scheme_template']).exists():
                # copy default template to project dir if it's doesn't exist there
                copyfile(
                    resource_filename(
                        __name__,
                        'template/' + self.defaults['scheme_template']),
                    options['scheme_template'])
            try:
                template = self._env.get_template(
                    str(options['scheme_template']))
                result += template.render(data=data)
            except Exception as e:
                self._warning(
                    f'\nFailed to render scheme template {options["scheme_template"]}',
                    error=e)
                return result

        return result
 def _process_jinja(self, spec: PosixPath, options: CombinedOptions) -> str:
     """Process swagger.json with jinja and return the resulting string"""
     self.logger.debug('Using jinja mode')
     data = yaml.safe_load(open(spec, encoding="utf8"))
     additional = options.get('additional_json_path')
     if additional:
         if not additional.exists():
             self._warning(
                 f'Additional swagger spec file {additional} is missing. Skipping'
             )
         else:
             add = yaml.safe_load(open(additional, encoding="utf8"))
             data = {**add, **data}
     if options.is_default('template') and not Path(
             options['template']).exists():
         copyfile(
             resource_filename(__name__,
                               'template/' + self.defaults['template']),
             options['template'])
     return self._to_md(data, options['template'])