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)]
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)]
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)]
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)]
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)]
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)
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)
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)]
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)]
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
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)]
def creator(): return unexpectedExceptionJson(jsonMessage, Exceptions.wrapException(result).message)