3737
3838
3939def load_validation_plugins (sandbox_dir : Path ,
40- allowed_modules : set [str ] | None = None ) -> list [PluginValidator ]:
40+ allowed_modules : set [str ] | None = None ,
41+ ) -> tuple [list [PluginValidator ], list [dict ]]:
4142 """Read validator plugin config, create per-plugin venvs, and return PluginValidator instances.
4243
4344 Reads from ``plugins.validators`` in bblocks-config.yaml.
4445 allowed_modules: if provided, only install/register modules in this set. Pass None to allow all.
46+
47+ Returns a tuple of (plugin_validators, register_entries) where register_entries is the enriched
48+ plugin list suitable for inclusion in register.json under 'validatorPlugins'.
4549 """
46- from ogc .bblocks .transform import read_plugin_entries
50+ from ogc .bblocks .transform import read_plugin_entries , _pip_to_url
4751
4852 plugin_entries = read_plugin_entries ('validators' )
4953 if not plugin_entries :
50- return []
54+ return [], []
5155
5256 result : list [PluginValidator ] = []
57+ output_plugins : list [dict ] = []
5358
5459 for plugin in plugin_entries :
5560 pip_deps = plugin .get ('pip' , [])
@@ -60,6 +65,8 @@ def load_validation_plugins(sandbox_dir: Path,
6065 if isinstance (modules , str ):
6166 modules = [modules ]
6267
68+ output_modules = []
69+
6370 for module_path in modules :
6471 if allowed_modules is not None and module_path not in allowed_modules :
6572 logger .info ("Skipping validator plugin '%s': not permitted by user" , module_path )
@@ -82,6 +89,7 @@ def load_validation_plugins(sandbox_dir: Path,
8289 logger .warning ("No validator classes found in plugin '%s'" , module_path )
8390 continue
8491
92+ output_validators = []
8593 for entry in discovered :
8694 mime_types = entry .get ('mime_types' , [])
8795 file_extensions = entry .get ('file_extensions' , [])
@@ -98,8 +106,29 @@ def load_validation_plugins(sandbox_dir: Path,
98106 logger .info ("Registered validator plugin '%s' (%s) for mime_types=%s extensions=%s" ,
99107 module_path , entry ['class' ], mime_types , file_extensions )
100108 result .append (pv )
101-
102- return result
109+ output_validators .append ({
110+ 'class' : entry ['class' ],
111+ 'mimeTypes' : mime_types ,
112+ 'fileExtensions' : file_extensions ,
113+ })
114+
115+ if output_validators :
116+ output_modules .append ({'module' : module_path , 'validators' : output_validators })
117+
118+ if output_modules :
119+ output_entry : dict = {'modules' : output_modules }
120+ original_pip = plugin .get ('pip' )
121+ if original_pip :
122+ output_entry ['pip' ] = original_pip
123+ if explicit_url := plugin .get ('url' ):
124+ output_entry ['urls' ] = [explicit_url ]
125+ else :
126+ urls = [u for s in pip_deps for u in [_pip_to_url (s )] if u ]
127+ if urls :
128+ output_entry ['urls' ] = urls
129+ output_plugins .append (output_entry )
130+
131+ return result , output_plugins
103132
104133
105134def report_to_dict (bblock : BuildingBlock ,
0 commit comments