Ejemplo n.º 1
0
    def _registerFunctions(self):
        def wrapIrsMethod(f):
            def wrapper(*args, **kwargs):
                fmt = ""
                logargs = []

                if self.cif.threadLocal.client:
                    fmt += "client [%s]"
                    logargs.append(self.cif.threadLocal.client)

                if getattr(self.cif.threadLocal,
                           'flowID', None) is not None:
                    fmt += " flowID [%s]"
                    logargs.append(self.cif.threadLocal.flowID)

                self.log.debug(fmt, *logargs)

                try:
                    return f(*args, **kwargs)
                except:
                    self.log.error("Unexpected exception", exc_info=True)
                    return errCode['unexpected']

            wrapper.__name__ = f.__name__
            wrapper.__doc__ = f.__doc__
            return wrapper

        globalMethods = self.getGlobalMethods()
        irsMethods = self.getIrsMethods()
        if not self.cif.irs:
            err = errCode['recovery'].copy()
            err['status'] = err['status'].copy()
            err['status']['message'] = 'Failed to initialize storage'
            self.server._dispatch = lambda method, params: err

        self.server.register_introspection_functions()
        for (method, name) in globalMethods:
            self.server.register_function(wrapApiMethod(method), name)
        for (method, name) in irsMethods:
            self.server.register_function(wrapIrsMethod(method), name)
        if _glusterEnabled and self.cif.gluster:
            for (method, name) in getGlusterMethods(self.cif.gluster):
                self.server.register_function(wrapApiMethod(method), name)