@@ -28,7 +28,18 @@ async def get_available_plugins(
28
28
# index registry plugins by url
29
29
registry_plugins_index = {}
30
30
for p in registry_plugins :
31
- plugin_url = p ["url" ]
31
+ plugin_url = p .get ("plugin_url" , None )
32
+ if plugin_url is None :
33
+ log .warning (f"Plugin { p .get ('name' )} has no `plugin_url`. It will be skipped from the registry list." )
34
+ continue
35
+ # url = p.get("url", None)
36
+ # if url and url != plugin_url:
37
+ # log.info(f"Plugin {p.get('name')} has `url` {url} different from `plugin_url` {plugin_url}. please check the plugin.")
38
+ if plugin_url in registry_plugins_index :
39
+ current = registry_plugins_index [plugin_url ]
40
+ log .warning (f"duplicate plugin_url { plugin_url } found in registry. Plugins { p .get ('name' )} has same url than { current .get ('name' )} . Skipping." )
41
+ continue
42
+
32
43
registry_plugins_index [plugin_url ] = p
33
44
34
45
# get active plugins
@@ -53,19 +64,20 @@ async def get_available_plugins(
53
64
manifest ["endpoints" ] = [{"name" : endpoint .name , "tags" : endpoint .tags } for endpoint in p .endpoints ]
54
65
manifest ["forms" ] = [{"name" : form .name } for form in p .forms ]
55
66
67
+ # do not show already installed plugins among registry plugins
68
+ r = registry_plugins_index .pop (manifest ["plugin_url" ], None )
69
+
56
70
# filter by query
57
71
plugin_text = [str (field ) for field in manifest .values ()]
58
72
plugin_text = " " .join (plugin_text ).lower ()
73
+
59
74
if (query is None ) or (query .lower () in plugin_text ):
60
- for r in registry_plugins :
61
- if r [ "plugin_url" ] == p . manifest [ "plugin_url" ]:
62
- if r [ "version" ] != p .manifest [ "version" ] :
63
- manifest ["upgrade" ] = r ["version" ]
75
+ if r is not None :
76
+ r_version = r . get ( "version" , None )
77
+ if r_version is not None and r_version != p .manifest . get ( "version" ) :
78
+ manifest ["upgrade" ] = r ["version" ]
64
79
installed_plugins .append (manifest )
65
80
66
- # do not show already installed plugins among registry plugins
67
- registry_plugins_index .pop (manifest ["plugin_url" ], None )
68
-
69
81
return {
70
82
"filters" : {
71
83
"query" : query ,
@@ -298,4 +310,4 @@ async def delete_plugin(
298
310
# remove folder, hooks and tools
299
311
ccat .mad_hatter .uninstall_plugin (plugin_id )
300
312
301
- return {"deleted" : plugin_id }
313
+ return {"deleted" : plugin_id }
0 commit comments