xmlrpclib and decoding entity references
Chris Curvey
ccurvey at gmail.com
Wed May 4 11:17:07 EDT 2005
Here is the solution. Incidentally, the client is Cold Fusion.
import re
import logging
import logging.config
import os
import SimpleXMLRPCServer
logging.config.fileConfig("logging.ini")
########################################################################
class
LoggingXMLRPCRequestHandler(SimpleXMLRPCServer.CGIXMLRPCRequestHandler):
def __dereference(self, request_text):
entityRe = re.compile("((?P<er>&#x)(?P<code>..)(?P<semi>;))")
for m in re.finditer(entityRe, request_text):
hexref = int(m.group(3),16)
charref = chr(hexref)
request_text = request_text.replace(m.group(1), charref)
return request_text
#-------------------------------------------------------------------
def handle_xmlrpc(self, request_text):
logger = logging.getLogger()
#logger.debug("************************************")
#logger.debug(request_text)
try:
#logger.debug("-------------------------------------")
request_text = self.__dereference(request_text)
#logger.debug(request_text)
request_text = request_text.decode("latin-1").encode('utf-8')
#logger.debug("************************************")
except Exception, e:
logger.error(request_text)
logger.error("had a problem dereferencing")
logger.error(e)
SimpleXMLRPCServer.CGIXMLRPCRequestHandler.handle_xmlrpc(self,
request_text)
########################################################################
class Foo:
def settings(self):
return os.environ
def echo(self, something):
logger = logging.getLogger()
logger.debug(something)
return something
def greeting(self, name):
return "hello, " + name
# these are used to run as a CGI
handler = LoggingXMLRPCRequestHandler()
handler.register_instance(Foo())
handler.handle_request()
More information about the Python-list
mailing list