1919PLUGIN_ENTRY_POINT = "unito.streamflow.plugin"
2020
2121
22+ def _add_extension (
23+ extensions : MutableMapping [str , Any ],
24+ ext_name : str ,
25+ name : str ,
26+ plugin_name : str ,
27+ value : type | MutableMapping [str , type ],
28+ ) -> None :
29+ if ext_name == "provenance_manager" :
30+ for wf_type in value :
31+ extensions .setdefault (ext_name , {})[name ] = {
32+ "name" : f"{ name } /{ wf_type } " ,
33+ "class" : get_class_fullname (value [wf_type ]),
34+ "plugin" : plugin_name ,
35+ }
36+ else :
37+ extensions .setdefault (ext_name , {})[name ] = {
38+ "name" : name ,
39+ "class" : get_class_fullname (value ),
40+ "plugin" : plugin_name ,
41+ }
42+
43+
2244def _filter_by_name (classes : MutableMapping [str , Any ], name : str ):
2345 filtered_classes = {}
2446 for class_ in classes :
@@ -39,6 +61,31 @@ def _flatten_all_of(entity_schema):
3961 return dict (sorted (entity_schema ["properties" ].items ()))
4062
4163
64+ def _get_plugin_and_class (name : str , type_ : str ) -> tuple [str , type | None ]:
65+ if type_ == "provenance_manager" :
66+ if "/" not in name :
67+ return "-" , None
68+ prov_name , wf_type = name .split ("/" , 1 )
69+ if (
70+ prov_name in extension_points [type_ ]
71+ and wf_type in extension_points [type_ ][prov_name ]
72+ ):
73+ return "-" , extension_points [type_ ][prov_name ][wf_type ]
74+ elif name in extension_points [type_ ]:
75+ return "-" , extension_points [type_ ][name ]
76+ for plugin_obj in entry_points (group = PLUGIN_ENTRY_POINT ):
77+ plugin_class = (plugin_obj .load ())()
78+ if isinstance (plugin_class , StreamFlowPlugin ):
79+ plugin_class .register ()
80+ plugin_classes = _filter_by_name (
81+ {k : v for k , v in plugin_class .classes_ .items () if k == type_ }, name
82+ )
83+ for item in plugin_classes .get (type_ , []):
84+ if item ["name" ] == name :
85+ return plugin_obj .name , item ["class" ]
86+ return "-" , None
87+
88+
4289def _get_property_desc (
4390 k : str , obj : MutableMapping [str , Any ], refs : MutableMapping [str , Any ]
4491) -> str :
@@ -151,11 +198,13 @@ def list_extensions(name: str | None, type_: str | None):
151198 if type_ is None or ext == type_ :
152199 for n , v in classes .items ():
153200 if name is None or name == n :
154- extensions .setdefault (ext , {})[n ] = {
155- "name" : n ,
156- "class" : get_class_fullname (v ),
157- "plugin" : "-" ,
158- }
201+ _add_extension (
202+ extensions = extensions ,
203+ ext_name = ext ,
204+ name = n ,
205+ plugin_name = "-" ,
206+ value = v ,
207+ )
159208 for k in max_sizes :
160209 max_sizes [k ] = max (max_sizes [k ], len (extensions [ext ][n ][k ]))
161210 if plugins := entry_points (group = PLUGIN_ENTRY_POINT ):
@@ -172,11 +221,13 @@ def list_extensions(name: str | None, type_: str | None):
172221 plugin_classes = _filter_by_name (plugin_classes , name )
173222 for ext , items in plugin_classes .items ():
174223 for item in items :
175- extensions .setdefault (ext , {})[item ["name" ]] = {
176- "name" : item ["name" ],
177- "class" : get_class_fullname (item ["class" ]),
178- "plugin" : plugin .name ,
179- }
224+ _add_extension (
225+ extensions = extensions ,
226+ ext_name = ext ,
227+ name = item ["name" ],
228+ plugin_name = plugin .name ,
229+ value = item ["class" ],
230+ )
180231 for k in max_sizes :
181232 max_sizes [k ] = max (
182233 max_sizes [k ], len (extensions [ext ][item ["name" ]][k ])
@@ -288,22 +339,7 @@ def load_extensions():
288339
289340
290341def show_extension (name : str , type_ : str ):
291- plugin = "-"
292- if name in extension_points [type_ ]:
293- class_ = extension_points [type_ ][name ]
294- else :
295- class_ = None
296- for plugin_obj in entry_points (group = PLUGIN_ENTRY_POINT ):
297- plugin_class = (plugin_obj .load ())()
298- if isinstance (plugin_class , StreamFlowPlugin ):
299- plugin_class .register ()
300- plugin_classes = _filter_by_name (
301- {k : v for k , v in plugin_class .classes_ .items () if k == type_ }, name
302- )
303- for item in plugin_classes .get (type_ , []):
304- if item ["name" ] == name :
305- class_ = item ["class" ]
306- plugin = plugin_obj .name
342+ plugin , class_ = _get_plugin_and_class (name , type_ )
307343 if class_ is not None :
308344 class_name = get_class_fullname (class_ )
309345 entity_schema = class_ .get_schema ()
0 commit comments