From 573f1039fbc9a86ef2f35843c3532b932a2b982b Mon Sep 17 00:00:00 2001 From: Stefan van der Walt Date: Tue, 3 Nov 2009 10:01:24 +0200 Subject: [PATCH] io: Track meta-data on plugins. --- scikits/image/io/_plugins/plugin.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/scikits/image/io/_plugins/plugin.py b/scikits/image/io/_plugins/plugin.py index 7e58866d..bb5168e6 100644 --- a/scikits/image/io/_plugins/plugin.py +++ b/scikits/image/io/_plugins/plugin.py @@ -2,7 +2,7 @@ """ -__all__ = ['use', 'load', 'available', 'call'] +__all__ = ['use', 'load', 'available', 'call', 'info'] import warnings from ConfigParser import ConfigParser @@ -16,6 +16,7 @@ plugin_store = {'imread': [], plugin_provides = {} plugin_module_name = {} +plugin_meta_data = {} def _scan_plugins(): """Scan the plugins directory for .ini files and parse them @@ -29,6 +30,12 @@ def _scan_plugins(): cp = ConfigParser() cp.read(f) name = cp.sections()[0] + + meta_data = {} + for opt in cp.options(name): + meta_data[opt] = cp.get(name, opt) + plugin_meta_data[name] = meta_data + provides = [s.strip() for s in cp.get(name, 'provides').split(',')] valid_provides = [p for p in provides if p in plugin_store] @@ -177,3 +184,22 @@ def load(plugin): if not func in store: store.insert(0, (plugin, func)) +def info(plugin): + """Return plugin meta-data. + + Parameters + ---------- + plugin : str + Name of plugin. + + Returns + ------- + m : dict + Meta data as specified in plugin ``.ini``. + + """ + try: + return plugin_meta_data[plugin] + except KeyError: + raise ValueError('No information on plugin "%s"' % plugin) +