33
44from plover .plugins_manager import global_registry , local_registry
55
6+ from plover .plugins_manager .requests import CachedFuturesSession
7+
68
79class PackageState :
810
@@ -46,6 +48,9 @@ def __lt__(self, other):
4648 def __repr__ (self ):
4749 return str (self )
4850
51+ #TODO update with proper URL
52+ UNSUPPORTED_PLUGINS_URL = 'https://raw.githubusercontent.com/mkrnr/plover_plugins_registry/registry_plover_v5/unsupported.json'
53+
4954
5055class Registry :
5156
@@ -90,14 +95,23 @@ def parse_unsupported_plover_version(self, unsupported_plover_version)->int:
9095 ) from e
9196 else :
9297 raise ValueError (
93- f'Unknown format for unsupported_plover_version "{ unsupported_plover_version } " from plugin metadata'
98+ f'Unknown format for unsupported plover version "{ unsupported_plover_version } " from plugin metadata'
9499 )
95100
96101
97- def is_plugin_supported (self , unsupported_plover_version ):
98- if unsupported_plover_version :
99- parsed_unsupported_plover_version = self .parse_unsupported_plover_version (unsupported_plover_version )
102+ def is_plugin_supported (self ,pkg , unsupported_plugins_dict ):
103+ if not unsupported_plugins_dict :
104+ return True
105+ if pkg .name in unsupported_plugins_dict :
106+ unsupported_plover_version = unsupported_plugins_dict [pkg .name ]
107+ try :
108+ parsed_unsupported_plover_version = self .parse_unsupported_plover_version (unsupported_plover_version )
109+ except :
110+ log .warning (f'Failed to parse unsupported plover version "{ pkg .unsupported_plover_version } " for plugin { pkg .name } , assuming plugin is supported' ,exc_info = True )
111+ return True
100112 current_major_plover_version = int (__version__ .split ('.' )[0 ])
113+ #TODO remove this overwrite after PR-1601 is merged and 5.0.0-alpha.1 released
114+ current_major_plover_version = 5
101115 return current_major_plover_version < parsed_unsupported_plover_version
102116 else :
103117 return True
@@ -106,9 +120,17 @@ def update(self):
106120 try :
107121 available_plugins = global_registry .list_plugins ()
108122 except :
109- log .error ("failed to fetch list of available plugins from PyPI" ,
123+ log .error ("Failed to fetch list of available plugins from PyPI" ,
110124 exc_info = True )
111125 return
126+
127+ session = CachedFuturesSession ()
128+ try :
129+ unsupported_plugins_dict = session .get (UNSUPPORTED_PLUGINS_URL ).result ().json ()
130+ except :
131+ log .warning ("Failed to fetch list of unsupported plugins, assuming all plugins are supported" ,
132+ exc_info = True )
133+
112134 for name , metadata in available_plugins .items ():
113135 pkg = self ._packages .get (name )
114136 if pkg is None :
@@ -118,10 +140,5 @@ def update(self):
118140 pkg .available = metadata
119141 if pkg .current and pkg .current .parsed_version < pkg .latest .parsed_version :
120142 pkg .status = 'outdated'
121- try :
122- is_plugin_supported = self .is_plugin_supported (pkg .unsupported_plover_version )
123- except :
124- log .warning (f'Failed to parse unsupported plover version "{ pkg .unsupported_plover_version } " for plugin { pkg .name } , assuming plugin is supported' ,exc_info = True )
125- is_plugin_supported = True
126- if not is_plugin_supported :
143+ if not self .is_plugin_supported (pkg , unsupported_plugins_dict ):
127144 pkg .status = 'unsupported'
0 commit comments