diff options
author | Praveen Arimbrathodiyil <pravi.a@gmail.com> | 2009-08-02 17:29:11 -0400 |
---|---|---|
committer | Praveen Arimbrathodiyil <pravi.a@gmail.com> | 2009-08-02 17:29:11 -0400 |
commit | ed79191ad9fcc57c2244f391928f09b2fbfd45a3 (patch) | |
tree | 3b8d927ecf8ac79f76f1a3da8023b906c64659f2 /silpa/jsonrpc/modpywrapper.py | |
parent | 96c6fb9ec5e604b077ab9f770b99cc021c87d85f (diff) | |
parent | e80ef8f61fdc885553e95aba2f444fdb949e11b6 (diff) | |
download | Rachana.git-ed79191ad9fcc57c2244f391928f09b2fbfd45a3.tar.gz Rachana.git-ed79191ad9fcc57c2244f391928f09b2fbfd45a3.tar.xz Rachana.git-ed79191ad9fcc57c2244f391928f09b2fbfd45a3.zip |
Merge branch 'master' of git://git.savannah.nongnu.org/smc
Diffstat (limited to 'silpa/jsonrpc/modpywrapper.py')
-rw-r--r-- | silpa/jsonrpc/modpywrapper.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/silpa/jsonrpc/modpywrapper.py b/silpa/jsonrpc/modpywrapper.py new file mode 100644 index 0000000..3e61017 --- /dev/null +++ b/silpa/jsonrpc/modpywrapper.py @@ -0,0 +1,52 @@ +import sys, os +from jsonrpc import ServiceHandler, ServiceException + + +class ServiceImplementaionNotFound(ServiceException): + pass + + +class ModPyServiceHandler(ServiceHandler): + def __init__(self, req): + self.req = req + ServiceHandler.__init__(self, None) + + + def findServiceEndpoint(self, name): + req = self.req + + (modulePath, fileName) = os.path.split(req.filename) + (moduleName, ext) = os.path.splitext(fileName) + + if not os.path.exists(os.path.join(modulePath, moduleName + ".py")): + raise ServiceImplementaionNotFound() + else: + if not modulePath in sys.path: + sys.path.insert(0, modulePath) + + from mod_python import apache + module = apache.import_module(moduleName, log=1) + + if hasattr(module, "service"): + self.service = module.service + elif hasattr(module, "Service"): + self.service = module.Service() + else: + self.service = module + + return ServiceHandler.findServiceEndpoint(self, name) + + + def handleRequest(self, data): + self.req.content_type = "text/plain" + data = self.req.read() + resultData = ServiceHandler.handleRequest(self, data) + self.req.write(resultData) + self.req.flush() + +def handler(req): + from mod_python import apache + ModPyServiceHandler(req).handleRequest(req) + return apache.OK + + |