from twisted.web.xmlrpc import Proxy
import pickle
from logging import warning, debug, critical


class TDBProxy:
    def __init__(self, server, port):
        self.server = Proxy('https://%s:%s/' % (server, port))

    def getTree(self, cred, base_path, _filter):
        """
        Returns tree rooted at base_path as a DataTree.
        """
        pickled = pickle.dumps( { 'cred': cred,
                                  'base_path': base_path,
                                  'filter': _filter } )

        deferred = self.server.callRemote('getTree', pickled)
        deferred.addCallback(TDBProxy.dataAvailable)
        return deferred

    @staticmethod
    def dataAvailable(result):
        return pickle.loads(result)
    
    def commit(self, cred, changes):
        pickled = pickle.dumps( { 'cred': cred,
                                  'changes': changes } )
        #print 'commiting changes : %s' % str(changes)
        deferred = self.server.callRemote('commit', pickled)
        return deferred

