Source code for gaphor.abc
from __future__ import annotations
import abc
from collections.abc import Iterable
from typing import TYPE_CHECKING, Protocol, TypeVar
if TYPE_CHECKING:
from gi.repository import Gio
from gaphor.core.modeling import Base
from gaphor.diagram.diagramtoolbox import (
DiagramType,
ElementCreateInfo,
ToolboxDefinition,
)
[docs]
class Service(abc.ABC):
"""Base interface for all services in Gaphor."""
[docs]
@abc.abstractmethod
def shutdown(self) -> None:
"""Shutdown the services, free resources."""
[docs]
class ActionProvider:
"""An action provider is a special service that provides actions via
``@action`` decorators on its methods (see gaphor/action.py)."""
[docs]
class ModelingLanguage(abc.ABC):
"""A model provider is a special service that provides an entrypoint to a
model implementation, such as UML, SysML, RAAML."""
@property
@abc.abstractmethod
def name(self) -> str:
"""Human-readable name of the modeling language."""
@property
@abc.abstractmethod
def toolbox_definition(self) -> ToolboxDefinition:
"""Get structure for the toolbox."""
@property
@abc.abstractmethod
def diagram_types(self) -> Iterable[DiagramType]:
"""Iterate diagram types."""
@property
@abc.abstractmethod
def element_types(self) -> Iterable[ElementCreateInfo]:
"""Iterate element types."""
@property
@abc.abstractmethod
def model_browser_model(self) -> type[TreeModel]:
"""A model for use in the Model Browser."""
[docs]
@abc.abstractmethod
def lookup_element(self, name: str, ns: str | None = None) -> type[Base] | None:
"""Look up a model element type by (class) name.
A namespace may be provided. This will allow the model to be loaded from
that specific modeling language only.
"""
class TreeItem(Protocol):
@property
def element(self) -> Base: ...
@property
def readonly_text(self) -> str: ...
T = TypeVar("T", bound=TreeItem, contravariant=True)
class TreeModel(Protocol[T]):
def __init__(self, *args, on_select=None, on_sync=None): ...
@property
def root(self) -> Gio.ListStore: ...
def child_model(self, item: T) -> Gio.ListStore | None: ...
@property
def template(self) -> str: ...
def tree_item_sort(self, a, b) -> int: ...
def should_expand(self, item: T, element: Base) -> bool: ...
def shutdown(self) -> None: ...