summaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorDaniel M. Pelt <D.M.Pelt@cwi.nl>2015-07-20 14:07:21 +0200
committerWillem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>2015-07-23 11:57:18 +0200
commitd91b51f6d58003de84a9d6dd8189fceba0e81a5a (patch)
tree215492c645ee57fb1cd65bab1c8f7bd0aabd058e /python
parent37abc22cf8d26fa3f7e282a1ee50a2a129d5a295 (diff)
downloadastra-d91b51f6d58003de84a9d6dd8189fceba0e81a5a.tar.gz
astra-d91b51f6d58003de84a9d6dd8189fceba0e81a5a.tar.bz2
astra-d91b51f6d58003de84a9d6dd8189fceba0e81a5a.tar.xz
astra-d91b51f6d58003de84a9d6dd8189fceba0e81a5a.zip
Allow registering plugins without explicit name, and fix exception handling when running in Matlab
Diffstat (limited to 'python')
-rw-r--r--python/astra/plugin.py71
-rw-r--r--python/astra/plugin_c.pyx14
2 files changed, 40 insertions, 45 deletions
diff --git a/python/astra/plugin.py b/python/astra/plugin.py
index f8fc3bd..4b32e6e 100644
--- a/python/astra/plugin.py
+++ b/python/astra/plugin.py
@@ -32,60 +32,47 @@ import traceback
class base(object):
def astra_init(self, cfg):
- try:
- args, varargs, varkw, defaults = inspect.getargspec(self.initialize)
- if not defaults is None:
- nopt = len(defaults)
- else:
- nopt = 0
- if nopt>0:
- req = args[2:-nopt]
- opt = args[-nopt:]
- else:
- req = args[2:]
- opt = []
+ args, varargs, varkw, defaults = inspect.getargspec(self.initialize)
+ if not defaults is None:
+ nopt = len(defaults)
+ else:
+ nopt = 0
+ if nopt>0:
+ req = args[2:-nopt]
+ opt = args[-nopt:]
+ else:
+ req = args[2:]
+ opt = []
- try:
- optDict = cfg['options']
- except KeyError:
- optDict = {}
+ try:
+ optDict = cfg['options']
+ except KeyError:
+ optDict = {}
- cfgKeys = set(optDict.keys())
- reqKeys = set(req)
- optKeys = set(opt)
+ cfgKeys = set(optDict.keys())
+ reqKeys = set(req)
+ optKeys = set(opt)
- if not reqKeys.issubset(cfgKeys):
- for key in reqKeys.difference(cfgKeys):
- log.error("Required option '" + key + "' for plugin '" + self.__class__.__name__ + "' not specified")
- raise ValueError("Missing required options")
+ if not reqKeys.issubset(cfgKeys):
+ for key in reqKeys.difference(cfgKeys):
+ log.error("Required option '" + key + "' for plugin '" + self.__class__.__name__ + "' not specified")
+ raise ValueError("Missing required options")
- if not cfgKeys.issubset(reqKeys | optKeys):
- log.warn(self.__class__.__name__ + ": unused configuration option: " + str(list(cfgKeys.difference(reqKeys | optKeys))))
+ if not cfgKeys.issubset(reqKeys | optKeys):
+ log.warn(self.__class__.__name__ + ": unused configuration option: " + str(list(cfgKeys.difference(reqKeys | optKeys))))
- args = [optDict[k] for k in req]
- kwargs = dict((k,optDict[k]) for k in opt if k in optDict)
- self.initialize(cfg, *args, **kwargs)
- except Exception:
- log.error(traceback.format_exc().replace("%","%%"))
- raise
+ args = [optDict[k] for k in req]
+ kwargs = dict((k,optDict[k]) for k in opt if k in optDict)
+ self.initialize(cfg, *args, **kwargs)
- def astra_run(self, its):
- try:
- self.run(its)
- except Exception:
- log.error(traceback.format_exc().replace("%","%%"))
- raise
-
-def register(name, className):
+def register(className):
"""Register plugin with ASTRA.
- :param name: Plugin name to register
- :type name: :class:`str`
:param className: Class name or class object to register
:type className: :class:`str` or :class:`class`
"""
- p.register(name,className)
+ p.register(className)
def get_registered():
"""Get dictionary of registered plugins.
diff --git a/python/astra/plugin_c.pyx b/python/astra/plugin_c.pyx
index 91b3cd5..8d6816b 100644
--- a/python/astra/plugin_c.pyx
+++ b/python/astra/plugin_c.pyx
@@ -38,7 +38,9 @@ from . import utils
cdef extern from "astra/PluginAlgorithm.h" namespace "astra":
cdef cppclass CPluginAlgorithmFactory:
+ bool registerPlugin(string className)
bool registerPlugin(string name, string className)
+ bool registerPluginClass(object className)
bool registerPluginClass(string name, object className)
object getRegistered()
string getHelp(string name)
@@ -46,11 +48,17 @@ cdef extern from "astra/PluginAlgorithm.h" namespace "astra":
cdef extern from "astra/PluginAlgorithm.h" namespace "astra::CPluginAlgorithmFactory":
cdef CPluginAlgorithmFactory* getSingletonPtr()
-def register(name, className):
+def register(className, name=None):
if inspect.isclass(className):
- fact.registerPluginClass(six.b(name), className)
+ if name==None:
+ fact.registerPluginClass(className)
+ else:
+ fact.registerPluginClass(six.b(name), className)
else:
- fact.registerPlugin(six.b(name), six.b(className))
+ if name==None:
+ fact.registerPlugin(six.b(className))
+ else:
+ fact.registerPlugin(six.b(name), six.b(className))
def get_registered():
return fact.getRegistered()