40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
""" This module provides a directly callable class that implements a remote method invokation.
|
|
"""
|
|
|
|
from xmlrpclib import ServerProxy
|
|
from xmlrpclib import Fault
|
|
|
|
from .exceptions import ProxyError
|
|
|
|
|
|
|
|
class Proxy(object):
|
|
""" This directly callable class implements a remote method invokation.
|
|
"""
|
|
|
|
def __init__(self, session, dispatcher):
|
|
self.session = session
|
|
self.dispatcher = dispatcher
|
|
|
|
|
|
def __call__(self, module, method, where=None, set=None):
|
|
backend = self.dispatcher.get_backend(module)
|
|
remote = getattr(ServerProxy(backend), module + '.' + method)
|
|
ticket = self.session.get_ticket()
|
|
user = self.session.get_user()
|
|
|
|
try:
|
|
if (where is None) and (set is None):
|
|
result = remote(user, ticket)
|
|
elif where is None:
|
|
result = remote(user, ticket, set)
|
|
elif set is None:
|
|
result = remote(user, ticket, where)
|
|
else:
|
|
result = remote(user, ticket, set, where)
|
|
|
|
except Fault as fault:
|
|
raise ProxyError(fault.faultString)
|
|
|
|
return result
|