Changeset 19cc408 for fedd/fedd.py


Ignore:
Timestamp:
Oct 3, 2008 4:46:21 PM (16 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-1.30, version-2.00, version-3.01, version-3.02
Children:
ea0a821
Parents:
01073f7
Message:

refactoring

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/fedd.py

    r01073f7 r19cc408  
    1515
    1616from fedd_util import fedd_ssl_context, fedid
    17 from fedd_proj import new_feddservice
     17from fedd_deter_impl import new_feddservice
     18from service_error import *
    1819
    1920# The SSL server here is based on the implementation described at
     
    2728        SSLServer.__init__(self, ME, handler, ssl_ctx)
    2829        self.impl = impl
     30        self.soap_methods = impl.get_soap_services()
     31        self.xmlrpc_methods = impl.get_xmlrpc_services()
    2932
    3033class fedd_soap_handler(BaseHTTPRequestHandler):
    3134    server_version = "ZSI/2.0 fedd/0.1 " + BaseHTTPRequestHandler.server_version
    32 
    3335
    3436    def send_xml(self, text, code=200):
     
    8082        if not self.check_method(ps): return
    8183        try:
    82             resp = self.server.impl.soap_dispatch(ps.body_root.localName, ps,
     84            resp = self.soap_dispatch(ps.body_root.localName, ps,
    8385                    fedid(cert=self.request.get_peer_cert()))
    8486        except Fault, f:
     
    9193            self.send_xml(str(sw))
    9294
     95    def soap_dispatch(self, method, req, fid):
     96        if self.server.soap_methods.has_key(method):
     97            try:
     98                return self.server.soap_methods[method](req, fid)
     99            except service_error, e:
     100                de = ns0.faultType_Def(
     101                        (ns0.faultType_Def.schema,
     102                            "FeddFaultBody")).pyclass()
     103                de._code=e.code
     104                de._errstr=e.code_string()
     105                de._desc=e.desc
     106                if  e.is_server_error():
     107                    raise Fault(Fault.Server, e.code_string(), detail=de)
     108                else:
     109                    raise Fault(Fault.Client, e.code_string(), detail=de)
     110        else:
     111            raise Fault(Fault.Client, "Unknown method: %s" % method)
     112
     113
    93114class fedd_xmlrpc_handler(BaseHTTPRequestHandler):
    94115    server_version = "ZSI/2.0 fedd/0.1 " + BaseHTTPRequestHandler.server_version
     
    120141        if method != None:
    121142            try:
    122                 resp = self.server.impl.xmlrpc_dispatch(method, params,
     143                resp = self.xmlrpc_dispatch(method, params,
    123144                            fedid(cert=self.request.get_peer_cert()))
    124145                data = xmlrpclib.dumps((resp,), encoding='UTF-8',
     
    129150        self.send_xml(data)
    130151
     152
     153    def xmlrpc_dispatch(self, method, req, fid):
     154        if self.server.xmlrpc_methods.has_key(method):
     155            try:
     156                return self.server.xmlrpc_methods[method](req, fid)
     157            except service_error, e:
     158                raise xmlrpclib.Fault(e.code_string(), e.desc)
     159        else:
     160            raise xmlrpclib.Fault(100, "Unknown method: %s" % method)
    131161
    132162class fedd_opts(OptionParser):
Note: See TracChangeset for help on using the changeset viewer.