#!/usr/bin/env python import cherrypy import json 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, **kwargs): experimentName = kwargs.get('experimentName') if experimentName is None or not len(experimentName): raise InvalidRequest('Missing experiment name.') experimentName = Encoder.decode(experimentName) dataDirectory = kwargs.get('dataDirectory') if dataDirectory is None or not len(dataDirectory): raise InvalidRequest('Missing data directory.') dataDirectory = Encoder.decode(dataDirectory) daqInfo = kwargs.get('daqInfo') if daqInfo is not None: daqInfo = Encoder.decode(daqInfo) 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, **kwargs): experimentName = kwargs.get('experimentName') if not experimentName: raise InvalidRequest('Missing experiment name.') experimentName = Encoder.decode(experimentName) response = self.experimentSessionControllerImpl.stopDaq(experimentName).getFullJsonRep() self.logger.debug('Returning: %s' % response) return response @cherrypy.expose @DmSessionController.require(DmSessionController.isAdministrator()) @DmSessionController.execute def upload(self, **kwargs): encodedDaqInfo = kwargs.get('daqInfo') if not encodedDaqInfo: raise InvalidRequest('Invalid DAQ info provided.') daqInfo = json.loads(Encoder.decode(encodedDaqInfo)) if not daqInfo.has_key('experimentName'): raise InvalidRequest('Experiment name is missing.') if not daqInfo.has_key('dataDirectory'): raise InvalidRequest('Data directory is missing.') response = self.experimentSessionControllerImpl.upload(daqInfo).getFullJsonRep() self.logger.debug('Returning: %s' % response) return response