def deactivateTracing(self, request, context):
        try:
            self.execution_environment.deactivate_tracing()
            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            return self.get_exception_info(ex)
    def closeSessionInDS(self, request, context):
        try:
            self.execution_environment.close_session_in_ee(
                Utils.get_id(request.sessionID))
            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            return self.get_exception_info(ex)
    def detachObjectFromSession(self, request, context):
        try:
            self.execution_environment.detach_object_from_session(Utils.get_id(request.objectID),
                                                                  Utils.get_id(request.sessionID))
            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            return self.get_exception_info(ex)
    def deleteAlias(self, request, context):
        try:
            self.execution_environment.delete_alias(Utils.get_id(request.sessionID),
                                                    Utils.get_id(request.objectID))
            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            return self.get_exception_info(ex)
    def consolidateVersion(self, request, context):

        try:
            self.execution_environment.consolidate_version(Utils.get_id(request.sessionID),
                                                           Utils.get_id(request.versionObjectID))

            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            return self.get_exception_info(ex)
    def federate(self, request, context):
        try:
            logger.verbose("Federation started")
            objects_to_persist = Utils.get_param_or_return(request.params)
            session_id = Utils.get_id(request.sessionID)
            self.execution_environment.federate(session_id, objects_to_persist)
            logger.verbose("Federation finished, sending response")
            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            return self.get_exception_info(ex)
 def unfederate(self, request, context):
     try:
         logger.verbose("Unfederation started")
         self.execution_environment.unfederate(Utils.get_id(request.sessionID),
                                             Utils.get_id(request.objectID),
                                             Utils.get_id(request.externalExecutionEnvironmentID),
                                             request.recursive)
         logger.verbose("Unfederation finished, sending response")
         return common_messages_pb2.ExceptionInfo()
     except Exception as ex:
         return self.get_exception_info(ex)
    def deployMetaClasses(self, request, context):
        
        logger.verbose("[deployMetaClasses] Deploying classes")

        try:
            namespace = request.namespace
            classes_map_yamls = request.deploymentPack 
            self.execution_environment.ds_deploy_metaclasses(namespace, classes_map_yamls)
            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            return self.get_exception_info(ex)
    def makePersistent(self, request, context):
        try:
            objects_to_persist = Utils.get_param_or_return(request.params)
            session_id = Utils.get_id(request.sessionID)
            self.execution_environment.make_persistent(session_id,
                                                       objects_to_persist)
            logger.verbose("MakePersistent finished, sending response")
            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            traceback.print_exc()
            return self.get_exception_info(ex)
 def synchronize(self, request, context):
     try:
         object_id = Utils.get_id(request.objectID)
         implementation_id = Utils.get_id(request.implementationID)
         serialized_params = Utils.get_param_or_return(request.params)
         session_id = Utils.get_id(request.sessionID)
         calling_backend_id = Utils.get_id(request.callingBackendID)
         self.execution_environment.synchronize(session_id, object_id, implementation_id,
                                                         serialized_params, calling_backend_id)
         return common_messages_pb2.ExceptionInfo()
     except DataClayException as ex:
         return self.get_exception_info(ex)
    def updateRefs(self, request, context):
        try:
            """ deserialize into dictionary of object id - integer """
            ref_counting = dict()
            for serialized_oid, counter in request.refsToUpdate.items():
                ref_counting[serialized_oid] = counter

            self.execution_environment.update_refs(ref_counting)
            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            traceback.print_exc()
            return self.get_exception_info(ex)
    def updateObject(self, request, context):
        try:

            self.execution_environment.update_object(
                Utils.get_id(request.sessionID),
                Utils.get_id(request.intoObjectID),
                Utils.get_param_or_return(request.fromObject))

            logger.verbose("updateObject finished, sending response")

            return common_messages_pb2.ExceptionInfo()

        except DataClayException as ex:
            return self.get_exception_info(ex)
    def notifyUnfederation(self, request, context):
        try:
            logger.verbose("Notify Unfederation started")
            session_id = Utils.get_id(request.sessionID)
            object_ids = set()
            for oid in request.objectIDs:
                object_ids.add(Utils.get_id(oid))
            self.execution_environment.notify_unfederation(session_id, object_ids)
            logger.verbose("Notify Unfederation finished, sending response")
            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            traceback.print_exc()
            return self.get_exception_info(ex)
    def notifyFederation(self, request, context):
        try:
            logger.verbose("Notify Federation started")
            objects_to_persist = []
            for vol_param in request.objects:
                param = Utils.get_obj_with_data_param_or_return(vol_param)
                objects_to_persist.append(param)
            session_id = Utils.get_id(request.sessionID)
            self.execution_environment.notify_federation(session_id, objects_to_persist)
            logger.verbose("Notify Federation finished, sending response")
            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            return self.get_exception_info(ex)
    def newMetaData(self, request, context):

        try:
            md_infos = {}

            for k, v in request.mdInfos.items():

                md_infos[Utils.get_id_from_uuid(k)] = dataclay_yaml_load(v)

            self.client.ds_new_metadata(md_infos)

            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            return self.get_exception_info(ex)
    def upsertObjects(self, request, context):

        try:
            session_id = Utils.get_id(request.sessionID)

            objects = []
            for entry in request.bytesUpdate:
                objects.append(Utils.get_obj_with_data_param_or_return(entry))

            self.execution_environment.upsert_objects(session_id, objects)

            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            return self.get_exception_info(ex)
    def get_exception_info(self, ex):
        ex_message = None
        if hasattr(ex, "message"):
            ex_message = ex.message
            logger.warning("Exception produced with message:\n%s", ex_message)

        try:
            ex_serialized = pickle.dumps(ex)
        except TypeError:
            logger.warning("Could not serialize %s", ex)
            ex_serialized = None

        return common_messages_pb2.ExceptionInfo(
            isException=True,
            serializedException=ex_serialized,
            exceptionMessage=Utils.prepare_exception(ex_message,
                                                     Utils.return_stack()))
    def storeObjects(self, request, context):
                
        try:
            objects_list = []
            for vol_param in request.objects:
                param = Utils.get_obj_with_data_param_or_return(vol_param)
                objects_list.append(param)

            ids_with_alias_set = set()
            session_id = Utils.get_id(request.sessionID)
            if request.idsWithAlias is not None and len(request.idsWithAlias) > 0:
                for ids_with_alias in request.idsWithAlias:
                    ids_with_alias_set.add(Utils.get_id(ids_with_alias))

            self.execution_environment.store_objects(session_id, objects_list, request.moving, ids_with_alias_set)
            return common_messages_pb2.ExceptionInfo()

        except Exception as ex:
            return self.get_exception_info(ex)