| 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 |
|
|---|