コード例 #1
0
    def render_POST(self, request):
        user = request.getUser()
        passwd = request.getPassword()

        if not self.enable_guest and not self.auth(user, passwd):
            request.setResponseCode(http.UNAUTHORIZED)
            return (user == '' and passwd == ''
                    ) and 'Authorization required!' or 'Authorization failed!'

        request.content.seek(0, 0)
        request.setHeader("content-type", "text/xml")
        try:
            args, functionPath = xmlrpclib.loads(request.content.read(),
                                                 use_datetime=True)
        except Exception as e:
            f = xmlrpclib.Fault(self.FAILURE,
                                "Can't deserialize input: %s" % (e, ))
            self._cbRender(f, request)
        else:
            try:
                function = self.lookupProcedure(functionPath)
            except xmlrpclib.Fault as f:
                self._cbRender(f, request)
            else:

                def closeReq(result):
                    deleteContext(requestId)
                    if isinstance(result, failure.Failure) and not isinstance(
                            result.value, xmlrpclib.Fault):
                        if isinstance(result.value, RegularError):
                            log.msg("Request error: " + repr(result.value))
                            return xmlrpclib.Fault(result.value.code,
                                                   str(result.value))
                        log.msg(
                            "Request finished with unexpected error. see traceback below"
                        )
                        result.printTraceback()
                        return xmlrpclib.Fault("INTERNAL_ERROR",
                                               str(result.value))

                    return result

                requestId = makeContext(Request, request, (functionPath, args))
                setCurrentContext(requestId)
                # Use this list to track whether the response has failed or not.
                # This will be used later on to decide if the result of the
                # Deferred should be written out and Request.finish called.
                responseFailed = []
                request.notifyFinish().addErrback(responseFailed.append)
                if getattr(function, 'withRequest', False):
                    d = defer.maybeDeferred(function, request, *args)
                else:
                    d = defer.maybeDeferred(function, *args)
                d.addBoth(closeReq)
                d.addErrback(self._ebRender)
                d.addCallback(self._cbRender, request, responseFailed)
        return server.NOT_DONE_YET
コード例 #2
0
ファイル: queue.py プロジェクト: Ri0n/rcore
 def finished(result, item):
     if Core.instance().debugEnabled():
         print("ActionQueue: job finished: " + str(result))
     
     self.active = False;
     reactor.callLater(0, self.checkQueue)
     if item.contextId:
         try:
             setCurrentContext(item.contextId)
         except Exception as e:
             print("ActionQueue: Unable to restore context. "
                   "this should never happen and may damage other context and their data.")
             print("ActionQueue: Actual result was: " + str(result))
             return ContextError(str(e)).toFailure()
コード例 #3
0
ファイル: xmlrpc.py プロジェクト: Ri0n/rcore
    def render_POST(self, request):
        user = request.getUser()
        passwd = request.getPassword()

        if not self.enable_guest and not self.auth(user, passwd):
            request.setResponseCode(http.UNAUTHORIZED)
            return (user == "" and passwd == "") and "Authorization required!" or "Authorization failed!"

        request.content.seek(0, 0)
        request.setHeader("content-type", "text/xml")
        try:
            args, functionPath = xmlrpclib.loads(request.content.read(), use_datetime=True)
        except Exception as e:
            f = xmlrpclib.Fault(self.FAILURE, "Can't deserialize input: %s" % (e,))
            self._cbRender(f, request)
        else:
            try:
                function = self.lookupProcedure(functionPath)
            except xmlrpclib.Fault as f:
                self._cbRender(f, request)
            else:

                def closeReq(result):
                    deleteContext(requestId)
                    if isinstance(result, failure.Failure) and not isinstance(result.value, xmlrpclib.Fault):
                        if isinstance(result.value, RegularError):
                            log.msg("Request error: " + repr(result.value))
                            return xmlrpclib.Fault(result.value.code, str(result.value))
                        log.msg("Request finished with unexpected error. see traceback below")
                        result.printTraceback()
                        return xmlrpclib.Fault("INTERNAL_ERROR", str(result.value))

                    return result

                requestId = makeContext(Request, request, (functionPath, args))
                setCurrentContext(requestId)
                # Use this list to track whether the response has failed or not.
                # This will be used later on to decide if the result of the
                # Deferred should be written out and Request.finish called.
                responseFailed = []
                request.notifyFinish().addErrback(responseFailed.append)
                if getattr(function, "withRequest", False):
                    d = defer.maybeDeferred(function, request, *args)
                else:
                    d = defer.maybeDeferred(function, *args)
                d.addBoth(closeReq)
                d.addErrback(self._ebRender)
                d.addCallback(self._cbRender, request, responseFailed)
        return server.NOT_DONE_YET
コード例 #4
0
    def __init__(self, configFile):
        global _coreInstance
        if _coreInstance:
            raise Exception("Instance of app already exists")
        _coreInstance = self

        self._deferredStopList = []

        from rcore.config import config
        config.reload(configFile)
        try:
            logDest = config()['log']['destination']
            if logDest == 'syslog':
                from twisted.python import syslog
                try:
                    prefix = config()['log']['syslogprefix']
                except:
                    prefix = os.path.basename(sys.argv[0])
                syslog.startLogging(prefix)
            elif logDest == 'stdout':
                log.startLogging(sys.stdout)
            else:
                dn = os.path.dirname(logDest)
                if not dn:
                    dn = self.get_default_log_dir()
                if dn and not os.path.exists(dn):
                    os.makedirs(dn, 0o755)
                log.startLogging(DailyLogFile(os.path.basename(logDest), dn))
        except Exception as e:
            log.startLogging(sys.stdout)
            log.msg(
                "Setting log from config file is failed. continue with logging to stdout: "
                + str(e))

        from rcore.alarm import Alarm
        self._rpcServices = {}
        self._users = {}
        self.mainContextId = makeContext(MainContext)
        setCurrentContext(self.mainContextId)
コード例 #5
0
ファイル: core.py プロジェクト: Ri0n/rcore
    def __init__(self, configFile):
        global _coreInstance
        if _coreInstance:
            raise Exception("Instance of app already exists")
        _coreInstance = self

        self._deferredStopList = []

        from rcore.config import config
        config.reload(configFile)
        try:
            logDest = config()['log']['destination']
            if logDest == 'syslog':
                from twisted.python import syslog
                try:
                    prefix = config()['log']['syslogprefix']
                except:
                    prefix = os.path.basename(sys.argv[0])
                syslog.startLogging(prefix)
            elif logDest == 'stdout':
                log.startLogging(sys.stdout)
            else:
                dn = os.path.dirname(logDest)
                if not dn:
                    dn = self.get_default_log_dir()
                if dn and not os.path.exists(dn):
                    os.makedirs(dn, 0755)
                log.startLogging(DailyLogFile(os.path.basename(logDest), dn))
        except Exception as e:
            log.startLogging(sys.stdout)
            log.msg("Setting log from config file is failed. continue with logging to stdout: " + str(e))

        from rcore.alarm import Alarm
        self._rpcServices = {}
        self._users = {}
        self.mainContextId = makeContext(MainContext)
        setCurrentContext(self.mainContextId)