Skip to content

Commit b6c64ae

Browse files
Merge pull request #40 from eccenca/feature/relatedPlugins-CMEM-7549
Add related plugins support to PluginDescription and Plugin
2 parents 91a07a7 + 7d6e07a commit b6c64ae

4 files changed

Lines changed: 28 additions & 17 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p
1010
### Added
1111

1212
- Plugins can be deprecated now (CMEM-6706)
13+
- Plugins can now reference related plugins via `related_plugins` (CMEM-7549)
1314

1415
## [4.16.1] 2026-02-20
1516

cmem_plugin_base/dataintegration/description.py

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,18 @@ def __str__(self):
6262
return f"""data:{self.mime_type};base64,{data_base64}"""
6363

6464

65+
class PluginReference:
66+
"""A reference to a related plugin.
67+
68+
:param plugin_id: The identifier of the related plugin.
69+
:param description: An optional description of the relationship.
70+
"""
71+
72+
def __init__(self, plugin_id: str, description: str = "") -> None:
73+
self.plugin_id = plugin_id
74+
self.description = description
75+
76+
6577
class PluginParameter:
6678
"""A plugin parameter.
6779
@@ -188,6 +200,7 @@ class PluginDescription:
188200
:param actions: Custom plugin actions.
189201
:param deprecation: Optional deprecation message.
190202
If set, the plugin will be marked as deprecated in the UI.
203+
:param related_plugins: Optional list of references to related plugins.
191204
"""
192205

193206
def __init__( # noqa: PLR0913
@@ -202,6 +215,7 @@ def __init__( # noqa: PLR0913
202215
icon: Icon | None = None,
203216
actions: list[PluginAction] | None = None,
204217
deprecation: str | None = None,
218+
related_plugins: list[PluginReference] | None = None,
205219
) -> None:
206220
# Set the type of the plugin. Same as the class name of the plugin
207221
# base class, e.g., 'WorkflowPlugin'.
@@ -225,23 +239,15 @@ def __init__( # noqa: PLR0913
225239
)
226240
else:
227241
self.plugin_id = plugin_id
228-
if categories is None:
229-
self.categories = []
230-
else:
231-
self.categories = categories
242+
self.categories = categories if categories is not None else []
232243
self.label = label
233244
self.description = description
234245
self.documentation = documentation
235-
if parameters is None:
236-
self.parameters = []
237-
else:
238-
self.parameters = parameters
246+
self.parameters = parameters if parameters is not None else []
239247
self.icon = icon
240-
if actions is None:
241-
self.actions = []
242-
else:
243-
self.actions = actions
248+
self.actions = actions if actions is not None else []
244249
self.deprecation = deprecation
250+
self.related_plugins = related_plugins if related_plugins is not None else []
245251
for action in self.actions:
246252
action.validate(plugin_class)
247253

@@ -327,6 +333,7 @@ class Plugin:
327333
:param actions: Custom plugin actions
328334
:param deprecation: Optional deprecation message.
329335
If set, the plugin will be marked as deprecated in the UI.
336+
:param related_plugins: Optional list of references to related plugins.
330337
"""
331338

332339
plugins: ClassVar[list[PluginDescription]] = []
@@ -342,6 +349,7 @@ def __init__( # noqa: PLR0913
342349
icon: Icon | None = None,
343350
actions: list[PluginAction] | None = None,
344351
deprecation: str | None = None,
352+
related_plugins: list[PluginReference] | None = None,
345353
):
346354
self.label = label
347355
self.description = description
@@ -350,6 +358,7 @@ def __init__( # noqa: PLR0913
350358
self.icon = icon
351359
self.actions = actions
352360
self.deprecation = deprecation
361+
self.related_plugins = related_plugins
353362
if categories is None:
354363
self.categories = []
355364
else:
@@ -372,6 +381,7 @@ def __call__(self, func: type):
372381
icon=self.icon,
373382
actions=self.actions,
374383
deprecation=self.deprecation,
384+
related_plugins=self.related_plugins,
375385
)
376386
Plugin.plugins.append(plugin_desc)
377387
return func

poetry.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ pytest-dotenv = "^0.5.2"
3838
pytest-html = "^4.2.0"
3939
pytest-memray = { version = "^1.8.0", markers = "platform_system != 'Windows'" }
4040
ruff = "^0.15.0"
41-
trivy-py-ecc = "^0.68.2.1"
41+
trivy-py-ecc = "^0.69.3.1"
4242
types-requests = "^2.32.0.20240907"
4343

4444
[build-system]

0 commit comments

Comments
 (0)