def get_result(self, method, **overrides): args, kwargs = get_arguments(method) arg_values = [] for name in args: if name in overrides: arg_values.append(overrides[name]) elif name in self.arguments: arg_values.append(self.arguments[name]) else: self.fail('Missing argument "%s" for %s' % (name, method.__name__)) for key in kwargs: if key in overrides: kwargs[key] = overrides[key] elif key in self.arguments: kwargs[key] = self.arguments[key] return method(*arg_values, **kwargs)
def run(self, xml_data): """ Processes the XML data, executes the commands, and returns the result. This is just a version of _marshaled_dispatch that uses datetime objects rather than these weird DateTime instances. """ try: params, method_name = xmlrpclib.loads(xml_data, use_datetime=1) except Exception: return self._exception_response() if logging.debug: method = self.funcs.get(method_name) if method: # Log the method signature that is being called. # Hide the password though! args = list(get_arguments(method)[0]) for (position, (name, value)) in enumerate(zip(args, params)): if name == 'password': value = '*' * len(value) args[position] = value logging.debug('Running %s%s' % (method_name, tuple(args))) try: response = self._dispatch(method_name, params) response = (response,) return xmlrpclib.dumps(response, methodresponse=1, allow_none=self.allow_none, encoding=self.encoding) except Fault, fault: logging.warning('Fault: %s' % fault) return xmlrpclib.dumps( fault, allow_none=self.allow_none, encoding=self.encoding, )