#!/usr/bin/env python import cherrypy import json import os from dm.common.service.dmSessionController import DmSessionController from dm.common.exceptions.invalidRequest import InvalidRequest from dm.common.utility.encoder import Encoder from dm.daq_web_service.service.impl.experimentSessionControllerImpl import ExperimentSessionControllerImpl class ExperimentSessionController(DmSessionController): def __init__(self): DmSessionController.__init__(self) self.experimentSessionControllerImpl = ExperimentSessionControllerImpl() @cherrypy.expose @DmSessionController.require(DmSessionController.isAdministrator()) @DmSessionController.execute def startDaq(self, experimentName, dataDirectory, **kwargs): if not experimentName: raise InvalidRequest('Missing experiment name.') experimentName = Encoder.decode(experimentName) if not dataDirectory: raise InvalidRequest('Missing data directory.') dataDirectory = Encoder.decode(dataDirectory) if not dataDirectory.startswith(os.sep): raise InvalidRequest('Data directory must be an absolute path.') daqInfo = {} encodedDaqInfo = kwargs.get('daqInfo') if encodedDaqInfo is not None: daqInfo = json.loads(Encoder.decode(encodedDaqInfo)) response = self.experimentSessionControllerImpl.startDaq(experimentName, dataDirectory, daqInfo).getFullJsonRep() self.logger.debug('Returning: %s' % response) return response @cherrypy.expose @DmSessionController.require(DmSessionController.isAdministrator()) @DmSessionController.execute def stopDaq(self, experimentName, dataDirectory, **kwargs): if not experimentName: raise InvalidRequest('Missing experiment name.') experimentName = Encoder.decode(experimentName) if not dataDirectory: raise InvalidRequest('Missing data directory.') dataDirectory = Encoder.decode(dataDirectory) response = self.experimentSessionControllerImpl.stopDaq(experimentName, dataDirectory).getFullJsonRep() self.logger.debug('Returning: %s' % response) return response @cherrypy.expose @DmSessionController.require(DmSessionController.isAdministrator()) @DmSessionController.execute def getDaqInfo(self, id, **kwargs): response = self.experimentSessionControllerImpl.getDaqInfo(id).getFullJsonRep() self.logger.debug('Returning: %s' % response) return response @cherrypy.expose @DmSessionController.require(DmSessionController.isAdministrator()) @DmSessionController.execute def upload(self, experimentName, dataDirectory, **kwargs): if not experimentName: raise InvalidRequest('Missing experiment name.') experimentName = Encoder.decode(experimentName) if not dataDirectory: raise InvalidRequest('Missing data directory.') dataDirectory = Encoder.decode(dataDirectory) if not dataDirectory.startswith(os.sep): raise InvalidRequest('Data directory must be an absolute path.') daqInfo = {} encodedDaqInfo = kwargs.get('daqInfo') if encodedDaqInfo: daqInfo = json.loads(Encoder.decode(encodedDaqInfo)) response = self.experimentSessionControllerImpl.upload(experimentName, dataDirectory, daqInfo).getFullJsonRep() self.logger.debug('Returning upload info for directory %s' % dataDirectory) return response @cherrypy.expose @DmSessionController.require(DmSessionController.isAdministrator()) @DmSessionController.execute def getUploadInfo(self, id, **kwargs): response = self.experimentSessionControllerImpl.getUploadInfo(id).getFullJsonRep() self.logger.debug('Returning info for upload id %s' % id) return response