Exemplo n.º 1
0
def element_factory():
    event_manager = EventManager()
    element_dispatcher = ElementDispatcher(event_manager, UMLModelingLanguage())
    element_factory = ElementFactory(event_manager, element_dispatcher)
    yield element_factory
    element_factory.shutdown()
    element_dispatcher.shutdown()
    event_manager.shutdown()
Exemplo n.º 2
0
def generate(
    filename: PathLike,
    outfile: PathLike,
    overridesfile: Optional[PathLike] = None,
) -> None:
    """Generates the Python data model.

    Opens the Gaphor model, generates the list of classes using the
    element factory, and then creates a new Python data model using a
    relationship search tree.
    """
    element_factory = ElementFactory()
    modeling_language = UMLModelingLanguage()
    with open(filename):
        storage.load(
            filename,
            element_factory,
            modeling_language,
        )

    classes: List = element_factory.lselect(UML.Class)
    classes, enumerations = find_enumerations(classes)
    classes = filter_out_gaphor_profile(classes)

    # Lambda key sort issue in mypy: https://github.com/python/mypy/issues/9656
    classes = sorted(
        (cls for cls in classes if cls.name[0] != "~"), key=lambda c: c.name  # type: ignore
    )

    hierarchy = create_class_hierarchy(classes)

    uml_classes = filter_uml_classes(classes, modeling_language)

    with open(outfile, "w") as f:
        f.write(header)
        for cls in uml_classes:
            f.write(f"from gaphor.UML import {cls.name}\n")

        cls_written: Set[Element] = set(uml_classes)
        for cls in hierarchy.keys():
            cls.attribute.sort(key=lambda a: a.name or "")  # type: ignore[attr-defined]
            write_class_def(cls, hierarchy, f, cls_written)

        f.write("\n\n")

        for cls in hierarchy.keys():
            write_properties(cls, f, enumerations)

        for cls in hierarchy.keys():
            write_subsets(cls, f)

    element_factory.shutdown()
Exemplo n.º 3
0
def generate(
    filename: PathLike,
    outfile: PathLike,
    overridesfile: Optional[PathLike] = None,
) -> None:
    """Generates the Python data model.

    Opens the Gaphor model, generates the list of classes using the element
    factory, and then creates a new Python data model using a relationship
    search tree.

    """
    element_factory = ElementFactory()
    modeling_language = UMLModelingLanguage()
    with open(filename):
        storage.load(
            filename,
            element_factory,
            modeling_language,
        )
    with open(outfile, "w") as f:
        f.write(header)
        classes: List = element_factory.lselect(
            lambda e: e.isKindOf(UML.Class))
        classes, enumerations = find_enumerations(classes)

        classes = sorted((cls for cls in classes if cls.name[0] != "~"),
                         key=lambda c: c.name)

        trees = create_class_trees(classes)
        create_referenced(classes)

        uml_classes = filter_uml_classes(classes, modeling_language)
        for cls in uml_classes:
            f.write(f"from gaphor.UML import {cls.name}\n")

        cls_written: Set[Element] = set(uml_classes)
        for cls in trees.keys():
            cls.attribute.sort(
                key=lambda a: a.name or "")  # type: ignore[attr-defined]
            write_class_def(cls, trees, f, cls_written)

        f.write("\n\n")

        for cls in trees.keys():
            write_properties(cls, f, enumerations)

    element_factory.shutdown()
Exemplo n.º 4
0
def element_factory():
    event_manager = EventManager()
    element_factory = ElementFactory()
    yield element_factory
    element_factory.shutdown()
    event_manager.shutdown()
Exemplo n.º 5
0
def element_factory(event_manager):
    element_factory = ElementFactory(
        event_manager, ElementDispatcher(event_manager, UMLModelingLanguage()))
    yield element_factory
    element_factory.shutdown()