diff options
author | Rob Crittenden <rcritten@redhat.com> | 2015-02-26 15:50:37 -0500 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2015-02-27 16:05:49 -0500 |
commit | 7957f8d19d6693de52c758cad76cd61480ec336f (patch) | |
tree | 2699c54ee08a54df7cf302e4278b93673ca0d013 /ipsilon/providers/common.py | |
parent | 075c3c53f72fde8e18af3f505249bef8812b7da3 (diff) | |
download | ipsilon-7957f8d19d6693de52c758cad76cd61480ec336f.tar.gz ipsilon-7957f8d19d6693de52c758cad76cd61480ec336f.tar.xz ipsilon-7957f8d19d6693de52c758cad76cd61480ec336f.zip |
Add base REST provider framework classes
These classes handle mounting the REST plugins.
The starting mount point is: /idp/rest/providers
https://fedorahosted.org/ipsilon/ticket/26
Signed-off-by: Rob Crittenden <rcritten@redhat.com>
Reviewed-by: Simo Sorce <simo@redhat.com>
Diffstat (limited to 'ipsilon/providers/common.py')
-rw-r--r-- | ipsilon/providers/common.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/ipsilon/providers/common.py b/ipsilon/providers/common.py index 4206387..dff302d 100644 --- a/ipsilon/providers/common.py +++ b/ipsilon/providers/common.py @@ -19,6 +19,7 @@ from ipsilon.util.log import Log from ipsilon.util.plugin import PluginInstaller, PluginLoader from ipsilon.util.plugin import PluginObject, PluginConfig from ipsilon.util.page import Page +from ipsilon.rest.common import RestPage import cherrypy @@ -153,3 +154,43 @@ class ProvidersInstall(object): def __init__(self): pi = PluginInstaller(ProvidersInstall, FACILITY) self.plugins = pi.get_plugins() + + +class RestProviderBase(RestPage): + + def __init__(self, site, config): + super(RestProviderBase, self).__init__(site) + self.plugin_name = config.name + self.cfg = config + + def GET(self, *args, **kwargs): + raise cherrypy.HTTPError(501) + + def POST(self, *args, **kwargs): + raise cherrypy.HTTPError(501) + + def DELETE(self, *args, **kwargs): + raise cherrypy.HTTPError(501) + + def PUT(self, *args, **kwargs): + raise cherrypy.HTTPError(501) + + def root(self, *args, **kwargs): + method = cherrypy.request.method + + preop = getattr(self, 'pre_%s' % method, None) + if preop and callable(preop): + preop(*args, **kwargs) + + op = getattr(self, method, self.GET) + if callable(op): + return op(*args, **kwargs) + else: + raise cherrypy.HTTPError(405) + + def _debug(self, fact): + superfact = '%s: %s' % (self.plugin_name, fact) + super(RestProviderBase, self)._debug(superfact) + + def _audit(self, fact): + cherrypy.log('%s: %s' % (self.plugin_name, fact)) |