Source code for xsdata.formats.plantuml.generator

from pathlib import Path
from typing import Iterator, List, Tuple

from xsdata.generators import AbstractGenerator
from xsdata.models.codegen import Class
from xsdata.models.elements import Schema


[docs]class PlantUmlGenerator(AbstractGenerator): templates_dir = Path(__file__).parent.joinpath("templates")
[docs] def render_module(self, output: str) -> str: return self.template("module").render(output=output)
[docs] def render_class(self, obj: Class) -> str: template = "enum" if obj.is_enumeration else "class" return self.template(template).render(obj=obj)
[docs] def render( self, schema: Schema, classes: List[Class], package: str ) -> Iterator[Tuple[Path, str]]: """Given a schema, a list of classes and a target package return to the writer factory the target file path and the rendered output.""" module = schema.module package_arr = package.split(".") package = "{}.{}".format(".".join(package_arr), module) target = Path.cwd().joinpath(*package_arr) file_path = target.joinpath(f"{module}.pu") self.resolver.process(classes=classes, schema=schema, package=package) output = self.render_classes() yield file_path, self.render_module(output=output)
[docs] def render_classes(self) -> str: """Sort classes by name and return the rendered output.""" classes = sorted(self.resolver.sorted_classes(), key=lambda x: x.name) output = "\n".join(map(self.render_class, classes)).strip() return f"\n{output}\n"