示例#1
0
    def handleExecuteMessage(self, jsonMessage, objectToExecuteOn):
        funImplementation = self.getFunctionForExecuteMessage(jsonMessage, objectToExecuteOn)

        def callback(result):
            if isinstance(result, Exception):
                def creator():
                    return unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(result).message)
                self.addResultToQueue(creator)
            else:
                def creator():
                    try:
                        return {
                            "messageId": jsonMessage["messageId"],
                            "responseType": "ExecutionResult",
                            "result": self.outgoingObjectCache.convertResponseToJson(result)
                            }
                    except Exception as e:
                        return unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(e).message)
                self.addResultToQueue(creator)

        try:
            objectArgs = self.convertObjectArgs(jsonMessage['args'])

            funImplementation(objectToExecuteOn, callback, objectArgs)
            return []
        except Exception as e:
            return [unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(e).message)]
示例#2
0
    def handleAssignMessage(self, jsonMessage, objectToRead):
        if "field" not in jsonMessage:
            raise MalformedMessageException("incoming message missing 'field' field: " + str(jsonMessage))

        if "value" not in jsonMessage:
            raise MalformedMessageException("incoming message missing 'value' field: " + str(jsonMessage))

        field = jsonMessage["field"]

        if not isinstance(field, str):
            raise MalformedMessageException("incoming 'field' not a string: " + str(jsonMessage))

        field = intern(field)

        try:
            fieldDef = getattr(getObjectClass(objectToRead), field)
        except:
            raise InvalidFieldException()

        fieldDef = getattr(getObjectClass(objectToRead), field)

        if not Decorators.isPropertyToExpose(fieldDef):
            raise InvalidFieldException()

        if not Decorators.propertyHasSetter(fieldDef):
            return InvalidFieldException()

        try:
            setter = Decorators.getSetter(field, fieldDef)

            setter(objectToRead, jsonMessage["value"])

            return [{"messageId": jsonMessage["messageId"], "responseType": "OK"}]
        except Exception as e:
            return [unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(e).message)]
示例#3
0
    def handleJsonMessage(self, incomingJsonMessage):
        if not isinstance(incomingJsonMessage, dict):
            raise MalformedMessageException(
                "Incoming message was not a dictionary: %s" % incomingJsonMessage)

        if not 'messageId' in incomingJsonMessage:
            raise MalformedMessageException(
                "Invalid incoming message id: %s" % incomingJsonMessage)

        if incomingJsonMessage['messageId'] != self.expectedMessageId:
            raise MalformedMessageException(
                "Invalid incoming message id: expected %s, but got %s. %s" %
                (self.expectedMessageId, incomingJsonMessage['messageId'], incomingJsonMessage)
                )

        try:
            self.expectedMessageId += 1

            if incomingJsonMessage['messageType'] not in self.messageTypeHandlers:
                raise MalformedMessageException("Invalid incoming messageType")

            if not 'objectDefinition' in incomingJsonMessage:
                raise MalformedMessageException("No object definition given")

            if incomingJsonMessage["messageType"] != "ServerFlushObjectIdsBelow":
                obj = self.extractObjectDefinition(incomingJsonMessage['objectDefinition'])
            else:
                obj = None

            return self.messageTypeHandlers[incomingJsonMessage["messageType"]](incomingJsonMessage, obj)
        except MalformedMessageException:
            raise
        except Exception as e:
            return [unexpectedExceptionJson(incomingJsonMessage, Exceptions.wrapException(e).message)]
示例#4
0
    def handleExecuteMessage(self, jsonMessage, objectToExecuteOn):
        funImplementation = self.getFunctionForExecuteMessage(jsonMessage, objectToExecuteOn)

        def callback(result):
            if isinstance(result, Exception):

                def creator():
                    return unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(result).message)

                self.addResultToQueue(creator)
            else:

                def creator():
                    try:
                        return {
                            "messageId": jsonMessage["messageId"],
                            "responseType": "ExecutionResult",
                            "result": self.outgoingObjectCache.convertResponseToJson(result),
                        }
                    except Exception as e:
                        return unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(e).message)

                self.addResultToQueue(creator)

        try:
            objectArgs = self.convertObjectArgs(jsonMessage["args"])

            funImplementation(objectToExecuteOn, callback, objectArgs)
            return []
        except Exception as e:
            return [unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(e).message)]
示例#5
0
    def handleJsonMessage(self, incomingJsonMessage):
        if not isinstance(incomingJsonMessage, dict):
            raise MalformedMessageException("Incoming message was not a dictionary: %s" % incomingJsonMessage)

        if not "messageId" in incomingJsonMessage:
            raise MalformedMessageException("Invalid incoming message id: %s" % incomingJsonMessage)

        if incomingJsonMessage["messageId"] != self.expectedMessageId:
            raise MalformedMessageException(
                "Invalid incoming message id: expected %s, but got %s. %s"
                % (self.expectedMessageId, incomingJsonMessage["messageId"], incomingJsonMessage)
            )

        try:
            self.expectedMessageId += 1

            if incomingJsonMessage["messageType"] not in self.messageTypeHandlers:
                raise MalformedMessageException("Invalid incoming messageType")

            if not "objectDefinition" in incomingJsonMessage:
                raise MalformedMessageException("No object definition given")

            if incomingJsonMessage["messageType"] != "ServerFlushObjectIdsBelow":
                obj = self.extractObjectDefinition(incomingJsonMessage["objectDefinition"])
            else:
                obj = None

            return self.messageTypeHandlers[incomingJsonMessage["messageType"]](incomingJsonMessage, obj)
        except MalformedMessageException:
            raise
        except Exception as e:
            return [unexpectedExceptionJson(incomingJsonMessage, Exceptions.wrapException(e).message)]
示例#6
0
 def creator():
     try:
         return {
             "messageId": jsonMessage["messageId"],
             "responseType": "ExecutionResult",
             "result": self.outgoingObjectCache.convertResponseToJson(result)
             }
     except Exception as e:
         return unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(e).message)
示例#7
0
 def creator():
     try:
         return {
             "messageId": jsonMessage["messageId"],
             "responseType": "ExecutionResult",
             "result": self.outgoingObjectCache.convertResponseToJson(result),
         }
     except Exception as e:
         return unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(e).message)
示例#8
0
    def handleReadMessage(self, jsonMessage, objectToRead):
        fieldFun = self.getFieldExtractorForReadMessage(jsonMessage, objectToRead)
        try:
            return [{
                "messageId": jsonMessage["messageId"],
                "responseType": "ReadResponse",
                "value": self.outgoingObjectCache.convertResponseToJson(fieldFun(objectToRead))
                }]

        except Exception as e:
            try:
                objectType = objectToRead.__location_class__ if ComputedGraph.isLocation(objectToRead) else str(objectToRead)
                logging.info("converting %s of type %s", fieldFun(objectToRead), objectType)
            except:
                pass
            return [unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(e).message)]
示例#9
0
    def handleAssignMessage(self, jsonMessage, objectToRead):
        if 'field' not in jsonMessage:
            raise MalformedMessageException(
                "incoming message missing 'field' field: " + str(jsonMessage)
                )

        if 'value' not in jsonMessage:
            raise MalformedMessageException(
                "incoming message missing 'value' field: " + str(jsonMessage)
                )

        field = jsonMessage['field']

        if not isinstance(field, str):
            raise MalformedMessageException(
                "incoming 'field' not a string: " + str(jsonMessage))

        field = intern(field)

        try:
            fieldDef = getattr(getObjectClass(objectToRead), field)
        except:
            raise InvalidFieldException()

        fieldDef = getattr(getObjectClass(objectToRead), field)

        if not Decorators.isPropertyToExpose(fieldDef):
            raise InvalidFieldException()

        if not Decorators.propertyHasSetter(fieldDef):
            return InvalidFieldException()

        try:
            setter = Decorators.getSetter(field, fieldDef)

            setter(objectToRead, jsonMessage['value'])

            return [{
                "messageId": jsonMessage["messageId"],
                "responseType": "OK"
                }]
        except Exception as e:
            return [unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(e).message)]
示例#10
0
    def recomputeSubscription_(self, subscriptionId):
        if subscriptionId not in self.subscriptionGetters:
            return

        try:
            newValue = self.subscriptionGetters[subscriptionId]()
        except Exception as e:
            e = Exceptions.wrapException(e)
            newValue = e

        if subscriptionId not in self.subscriptionValues:
            self.subscriptionValues[subscriptionId] = newValue
            return

        existingValue = self.subscriptionValues[subscriptionId]

        if existingValue != newValue:
            self.changedSubscriptions.add(subscriptionId)
            self.subscriptionValues[subscriptionId] = newValue
示例#11
0
    def recomputeSubscription_(self, subscriptionId):
        if subscriptionId not in self.subscriptionGetters:
            return

        try:
            newValue = self.subscriptionGetters[subscriptionId]()
        except Exception as e:
            e = Exceptions.wrapException(e)
            newValue = e

        if subscriptionId not in self.subscriptionValues:
            self.subscriptionValues[subscriptionId] = newValue
            return

        existingValue = self.subscriptionValues[subscriptionId]

        if existingValue != newValue:
            self.changedSubscriptions.add(subscriptionId)
            self.subscriptionValues[subscriptionId] = newValue
示例#12
0
    def handleReadMessage(self, jsonMessage, objectToRead):
        fieldFun = self.getFieldExtractorForReadMessage(jsonMessage, objectToRead)
        try:
            return [
                {
                    "messageId": jsonMessage["messageId"],
                    "responseType": "ReadResponse",
                    "value": self.outgoingObjectCache.convertResponseToJson(fieldFun(objectToRead)),
                }
            ]

        except Exception as e:
            try:
                objectType = (
                    objectToRead.__location_class__ if ComputedGraph.isLocation(objectToRead) else str(objectToRead)
                )
                logging.info("converting %s of type %s", fieldFun(objectToRead), objectType)
            except:
                pass
            return [unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(e).message)]
示例#13
0
 def creator():
     return unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(result).message)
示例#14
0
 def creator():
     return unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(result).message)