Ticket #3219: xmlrpc_datetime.diff
| File xmlrpc_datetime.diff, 3.3 KB (added by chadmaine, 5 years ago) |
|---|
-
twisted/web/xmlrpc.py
95 95 separator = '.' 96 96 allowedMethods = ('POST',) 97 97 98 def __init__(self, allowNone=False ):98 def __init__(self, allowNone=False, useDateTime=False): 99 99 resource.Resource.__init__(self) 100 100 self.subHandlers = {} 101 101 self.allowNone = allowNone 102 self.useDateTime = useDateTime 102 103 103 104 def putSubHandler(self, prefix, handler): 104 105 self.subHandlers[prefix] = handler … … 113 114 request.content.seek(0, 0) 114 115 request.setHeader("content-type", "text/xml") 115 116 try: 116 args, functionPath = xmlrpclib.loads(request.content.read() )117 args, functionPath = xmlrpclib.loads(request.content.read(), use_datetime=self.useDateTime) 117 118 except Exception, e: 118 119 f = Fault(self.FAILURE, "Can't deserialize input: %s" % (e,)) 119 120 self._cbRender(f, request) … … 301 302 protocol = QueryProtocol 302 303 303 304 def __init__(self, path, host, method, user=None, password=None, 304 allowNone=False, args=() ):305 allowNone=False, args=(), useDateTime=False): 305 306 self.path, self.host = path, host 306 307 self.user, self.password = user, password 307 308 self.payload = payloadTemplate % (method, 308 309 xmlrpclib.dumps(args, allow_none=allowNone)) 309 310 self.deferred = defer.Deferred() 311 self.useDateTime = useDateTime 310 312 311 313 def parseResponse(self, contents): 312 314 if not self.deferred: 313 315 return 314 316 try: 315 response = xmlrpclib.loads(contents )317 response = xmlrpclib.loads(contents, use_datetime=self.useDateTime) 316 318 except: 317 319 deferred, self.deferred = self.deferred, None 318 320 deferred.errback(failure.Failure()) … … 347 349 """ 348 350 queryFactory = _QueryFactory 349 351 350 def __init__(self, url, user=None, password=None, allowNone=False ):352 def __init__(self, url, user=None, password=None, allowNone=False, useDateTime=False): 351 353 """ 352 354 @type url: C{str} 353 355 @param url: The URL to which to post method calls. Calls will be made … … 370 372 @type allowNone: C{bool} or None 371 373 @param allowNone: allow the use of None values in parameters. It's 372 374 passed to the underlying xmlrpclib implementation. Default to False. 375 376 @type useDateTime: C{bool} or None 377 @param useDateTime: Convert xmlrpclib.DateTime objects to datetime.datetime objects. It's 378 passed to the underlying xmlrpclib implementation. Default to False. 379 373 380 """ 374 381 scheme, netloc, path, params, query, fragment = urlparse.urlparse(url) 375 382 netlocParts = netloc.split('@') … … 397 404 if password is not None: 398 405 self.password = password 399 406 self.allowNone = allowNone 407 self.useDateTime = useDateTime 400 408 401 409 def callRemote(self, method, *args): 402 410 factory = self.queryFactory( 403 411 self.path, self.host, method, self.user, 404 self.password, self.allowNone, args )412 self.password, self.allowNone, args, self.useDateTime) 405 413 if self.secure: 406 414 from twisted.internet import ssl 407 415 reactor.connectSSL(self.host, self.port or 443,
