Skip to content
Snippets Groups Projects
experimentSessionController.py 3.8 KiB
Newer Older

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())
    def startDaq(self, experimentName, dataDirectory, **kwargs):
sveseli's avatar
sveseli committed
        if not experimentName:
            raise InvalidRequest('Missing experiment name.')
        experimentName = Encoder.decode(experimentName)
sveseli's avatar
sveseli committed
        if not dataDirectory:
            raise InvalidRequest('Missing data directory.')
        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())
    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()
sveseli's avatar
sveseli committed
        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()
sveseli's avatar
sveseli committed
        self.logger.debug('Returning info for upload id %s' % id)
        return response