*** views.py 2007-05-13 07:43:05.000000000 -0300 --- views1.py 2007-11-20 16:09:00.000000000 -0300 *************** *** 4,9 **** --- 4,10 ---- New BSD License =============== Copyright (c) 2007, Graham Binns + derivated request and arguments handling code by Nubis All rights reserved. *************** *** 34,49 **** from django.core.exceptions import ImproperlyConfigured from SimpleXMLRPCServer import SimpleXMLRPCDispatcher from xmlrpclib import Fault ! from django.http import HttpResponse, HttpResponseServerError from django.conf import settings from django.shortcuts import render_to_response import sys # Declare xmlrpcdispatcher correctly depending on our python version if sys.version_info[:3] >= (2,5,): ! xmlrpcdispatcher = SimpleXMLRPCDispatcher(allow_none=False, encoding=None) else: ! xmlrpcdispatcher = SimpleXMLRPCDispatcher() def test_xmlrpc(text): """ --- 35,67 ---- from django.core.exceptions import ImproperlyConfigured from SimpleXMLRPCServer import SimpleXMLRPCDispatcher from xmlrpclib import Fault ! from django.http import HttpResponse, HttpResponseServerError, HttpResponseNotFound from django.conf import settings from django.shortcuts import render_to_response import sys + class DjangoXMLRPCDispatcher(SimpleXMLRPCDispatcher): + def _marshaled_dispatch(self, request, django_args, django_kwargs): + def dispatch_method(method, params): + try: + func = self.funcs[method] + except KeyError: + raise Exception('method "%s" is not supported' % method) + + kwargs = {} + if django_args: + kwargs['django_args'] = django_args + if django_kwargs: + kwargs['django_kwargs'] = django_kwargs + return func(request, *params, **kwargs) + + return SimpleXMLRPCDispatcher._marshaled_dispatch(self, request.raw_post_data, dispatch_method) + # Declare xmlrpcdispatcher correctly depending on our python version if sys.version_info[:3] >= (2,5,): ! xmlrpcdispatcher = DjangoXMLRPCDispatcher(allow_none=False, encoding=None) else: ! xmlrpcdispatcher = DjangoXMLRPCDispatcher() def test_xmlrpc(text): """ *************** *** 51,57 **** """ return "Here's a response! %s" % str(locals()) ! def handle_xmlrpc(request): """ Handles XML-RPC requests. All XML-RPC calls should be forwarded here --- 69,75 ---- """ return "Here's a response! %s" % str(locals()) ! def handle_xmlrpc(request, *args, **kwargs): """ Handles XML-RPC requests. All XML-RPC calls should be forwarded here *************** *** 65,79 **** print request.raw_post_data try: response.write( ! xmlrpcdispatcher._marshaled_dispatch(request.raw_post_data)) if settings.DEBUG: print response return response except Exception, e: return HttpResponseServerError() else: ! return render_to_response(settings.XMLRPC_GET_TEMPLATE) ! # Load up any methods that have been registered with the server in settings for path, name in settings.XMLRPC_METHODS: # if "path" is actually a function, just add it without fuss --- 83,99 ---- print request.raw_post_data try: response.write( ! xmlrpcdispatcher._marshaled_dispatch(request, args, kwargs)) if settings.DEBUG: print response return response except Exception, e: return HttpResponseServerError() else: ! try: ! return render_to_response(settings.XMLRPC_GET_TEMPLATE) ! except AttributeError: ! return HttpResponseNotFound("XMLRPC methods not available via GET") # Load up any methods that have been registered with the server in settings for path, name in settings.XMLRPC_METHODS: # if "path" is actually a function, just add it without fuss