first commit
[bitcoin:spesmilo.git] / jsonrpc / .svn / text-base / modpywrapper.py.svn-base
1 import sys, os
2 from jsonrpc import ServiceHandler, ServiceException
3
4
5 class ServiceImplementaionNotFound(ServiceException):
6     pass
7
8
9 class ModPyServiceHandler(ServiceHandler):
10     def __init__(self, req):
11         self.req = req
12         ServiceHandler.__init__(self, None)
13
14
15     def findServiceEndpoint(self, name):
16         req = self.req
17
18         (modulePath, fileName) = os.path.split(req.filename)
19         (moduleName, ext) = os.path.splitext(fileName)
20         
21         if not os.path.exists(os.path.join(modulePath, moduleName + ".py")):
22             raise ServiceImplementaionNotFound()
23         else:
24             if not modulePath in sys.path:
25                 sys.path.insert(0, modulePath)
26
27             from mod_python import apache
28             module = apache.import_module(moduleName, log=1)
29             
30             if hasattr(module, "service"):
31                 self.service = module.service
32             elif hasattr(module, "Service"):
33                 self.service = module.Service()
34             else:
35                 self.service = module
36
37         return ServiceHandler.findServiceEndpoint(self, name)
38             
39     
40     def handleRequest(self, data):
41         self.req.content_type = "text/plain"
42         data = self.req.read()
43         resultData = ServiceHandler.handleRequest(self, data)
44         self.req.write(resultData)
45         self.req.flush()
46
47 def handler(req):
48     from mod_python import apache
49     ModPyServiceHandler(req).handleRequest(req)
50     return apache.OK
51     
52