Changeset 2612

Show
Ignore:
Timestamp:
09/03/07 05:43:06 (1 year ago)
Author:
athomas
Message:

Use the XML content-type provided by the client, if available.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • xmlrpcplugin/trunk/tracrpc/web_ui.py

    r2610 r2612  
     1import re 
     2import xmlrpclib 
    13from pkg_resources import resource_filename 
    24from trac.core import * 
     
    57from tracrpc.api import IXMLRPCHandler, XMLRPCSystem 
    68from trac.wiki.formatter import wiki_to_oneliner 
    7 import xmlrpclib 
    89 
    910class XMLRPCWeb(Component): 
     
    1112        methods available to the currently logged in user. Browsing to 
    1213        <trac>/xmlrpc or <trac>/login/xmlrpc will display this list. """ 
     14 
     15    content_type_re = re.compile(r'(text|application)/xml') 
    1316 
    1417    implements(IRequestHandler, ITemplateProvider) 
     
    1821        return req.path_info in ('/login/xmlrpc', '/xmlrpc') 
    1922 
    20     def _send_response(self, req, response): 
     23    def _send_response(self, req, response, content_type='application/xml'): 
    2124        req.send_response(200) 
    22         req.send_header('Content-Type', 'text/xml'
     25        req.send_header('Content-Type', content_type
    2326        req.send_header('Content-Length', len(response)) 
    2427        req.end_headers() 
     
    3033 
    3134        # Dump RPC functions 
    32         content_type = req.get_header('Content-Type') 
    33         if content_type is None or 'text/xml' not in content_type: 
     35        content_type = req.get_header('Content-Type') or 'text/html' 
     36        self.env.log.debug(content_type) 
     37        if not self.content_type_re.match(content_type): 
    3438            namespaces = {} 
    3539            for method in XMLRPCSystem(self.env).all_methods(req): 
     
    5660        try: 
    5761            result = XMLRPCSystem(self.env).get_method(method)(req, args) 
    58             self._send_response(req, xmlrpclib.dumps(result, methodresponse=True)
     62            self._send_response(req, xmlrpclib.dumps(result, methodresponse=True), content_type
    5963        except xmlrpclib.Fault, e: 
    6064            self.log.error(e) 
    61             self._send_response(req, xmlrpclib.dumps(e)
     65            self._send_response(req, xmlrpclib.dumps(e), content_type
    6266        except Exception, e: 
    6367            self.log.error(e)