Let ModelProvider load modelProviders
Model providers do not need to be services. They do not have behaviour, only provider data to other services.
This commit is contained in:
51
gaphor/services/modelprovider.py
Normal file
51
gaphor/services/modelprovider.py
Normal file
@ -0,0 +1,51 @@
|
||||
from typing import Dict
|
||||
|
||||
from gaphor.abc import ModelProvider, Service
|
||||
from gaphor.entrypoint import initialize
|
||||
|
||||
|
||||
class ModelProviderService(Service, ModelProvider):
|
||||
|
||||
DEFAULT_PROFILE = "UML"
|
||||
|
||||
def __init__(self, properties={}):
|
||||
"""
|
||||
Create a new Model Provider. It will provide all models defined
|
||||
as entrypoints under `[gaphor.modelproviders]`.
|
||||
|
||||
Te `properties` argument is optional, in which case the service will
|
||||
default to UML.
|
||||
"""
|
||||
self.model_providers: Dict[str, ModelProvider] = initialize(
|
||||
"gaphor.modelproviders"
|
||||
)
|
||||
self.properties = properties
|
||||
|
||||
def shutdown(self):
|
||||
pass
|
||||
|
||||
@property
|
||||
def active_provider(self):
|
||||
profile = self.properties.get("profile", default=self.DEFAULT_PROFILE)
|
||||
if profile not in self.model_providers:
|
||||
profile = self.DEFAULT_PROFILE
|
||||
return self.model_providers[profile]
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self.active_provider.name
|
||||
|
||||
def lookup_element(self, name):
|
||||
return self.first(lambda provider: provider.lookup_element(name))
|
||||
|
||||
def lookup_diagram_item(self, name):
|
||||
return self.first(lambda provider: provider.lookup_diagram_item(name))
|
||||
|
||||
def toolbox_definition(self):
|
||||
return self.active_provider.toolbox_definition
|
||||
|
||||
def first(self, predicate):
|
||||
for _, provider in self.model_providers.items():
|
||||
type = predicate(provider)
|
||||
if type:
|
||||
return type
|
7
gaphor/services/tests/test_modelprovider.py
Normal file
7
gaphor/services/tests/test_modelprovider.py
Normal file
@ -0,0 +1,7 @@
|
||||
from gaphor.services.modelprovider import ModelProviderService
|
||||
|
||||
|
||||
def test_loading_of_model_providers():
|
||||
model_provider = ModelProviderService(properties={})
|
||||
|
||||
assert "UML" in model_provider.model_providers
|
@ -71,7 +71,7 @@ gaphorconvert = 'gaphor.tools.gaphorconvert:main'
|
||||
"properties" = "gaphor.services.properties:Properties"
|
||||
"undo_manager" = "gaphor.services.undomanager:UndoManager"
|
||||
"element_factory" = "gaphor.core.modeling:ElementFactory"
|
||||
"model_provider" = "gaphor.UML.modelprovider:UMLModelProvider"
|
||||
"model_provider" = "gaphor.services.modelprovider:ModelProviderService"
|
||||
"uml_model_provider" = "gaphor.UML.modelprovider:UMLModelProvider"
|
||||
"file_manager" = "gaphor.ui.filemanager:FileManager"
|
||||
"recent_files" = "gaphor.ui.recentfiles:RecentFiles"
|
||||
@ -89,6 +89,9 @@ gaphorconvert = 'gaphor.tools.gaphorconvert:main'
|
||||
"diagram_export" = "gaphor.plugins.diagramexport:DiagramExport"
|
||||
"xmi_export" = "gaphor.plugins.xmiexport:XMIExport"
|
||||
|
||||
[tool.poetry.plugins."gaphor.modelproviders"]
|
||||
"UML" = "gaphor.UML.modelprovider:UMLModelProvider"
|
||||
|
||||
[tool.isort]
|
||||
multi_line_output = 3
|
||||
include_trailing_comma = true
|
||||
|
Reference in New Issue
Block a user