#!/usr/bin/env python import cherrypy from dm.common.service.dmSessionController import DmSessionController from dm.common.exceptions.invalidRequest import InvalidRequest from dm.common.exceptions.authorizationError import AuthorizationError from dm.common.utility.encoder import Encoder from dm.ds_web_service.service.impl.experimentSessionControllerImpl import ExperimentSessionControllerImpl class ExperimentSessionController(DmSessionController): def __init__(self): DmSessionController.__init__(self) self.experimentSessionControllerImpl = ExperimentSessionControllerImpl() @cherrypy.expose @DmSessionController.require(DmSessionController.isLoggedIn()) @DmSessionController.execute def getExperimentTypes(self, **kwargs): return self.listToJson(self.experimentSessionControllerImpl.getExperimentTypes()) @cherrypy.expose @DmSessionController.require(DmSessionController.isLoggedIn()) @DmSessionController.execute def getExperimentTypeById(self, id, **kwargs): experimentType = self.experimentSessionControllerImpl.getExperimentTypeById(id) return experimentType.getFullJsonRep() @cherrypy.expose @DmSessionController.require(DmSessionController.isAdministrator()) @DmSessionController.execute def getExperiments(self, **kwargs): return self.listToJson(self.experimentSessionControllerImpl.getExperiments()) @cherrypy.expose @DmSessionController.require(DmSessionController.isLoggedIn()) @DmSessionController.execute def getExperimentsByStation(self, stationName, **kwargs): if not self.hasAdministratorRole() and not self.hasManagerRole(stationName): raise AuthorizationError('User %s cannot retrieve experiments for station %s.' % (self.getSessionUsername(), stationName)) return self.listToJson(self.experimentSessionControllerImpl.getExperimentsByStation(stationName)) @cherrypy.expose @DmSessionController.require(DmSessionController.isLoggedIn()) @DmSessionController.execute def getExperimentByName(self, name, **kwargs): experiment = self.experimentSessionControllerImpl.getExperimentByName(name) if not self.hasAdministratorRole() and not self.hasManagerRole(experiment['experimentStationId']): raise AuthorizationError('User %s cannot retrieve experiment %s.' % (self.getSessionUsername(), name)) return experiment.getFullJsonRep() @cherrypy.expose @DmSessionController.require(DmSessionController.isLoggedIn()) @DmSessionController.execute def getExperimentById(self, id, **kwargs): experiment = self.experimentSessionControllerImpl.getExperimentById(id) if not self.hasAdministratorRole() and not self.hasManagerRole(experiment['experimentStationId']): raise AuthorizationError('User %s cannot retrieve experiment %s.' % (self.getSessionUsername(), id)) return experiment.getFullJsonRep() @cherrypy.expose @DmSessionController.require(DmSessionController.isLoggedIn()) @DmSessionController.execute def addExperiment(self, **kwargs): name = kwargs.get('name') if not name: raise InvalidRequest('Missing experiment name.') name = Encoder.decode(name) stationName = kwargs.get('stationName') if not stationName: raise InvalidRequest('Missing experiment station name.') stationName = Encoder.decode(stationName) typeName = kwargs.get('typeName') if not typeName: raise InvalidRequest('Missing experiment type.') typeName = Encoder.decode(typeName) description = kwargs.get('description') if description is not None: description = Encoder.decode(description) startDate = kwargs.get('startDate') if startDate is not None: startDate = Encoder.decode(startDate) endDate = kwargs.get('endDate') if endDate is not None: endDate = Encoder.decode(endDate) if not self.hasAdministratorRole() and not self.hasManagerRole(stationName): raise AuthorizationError('User %s is not allowed to add experiment on station %s.' % (self.getSessionUsername(), stationName)) response = self.experimentSessionControllerImpl.addExperiment(name, stationName, typeName, description, startDate, endDate).getFullJsonRep() self.logger.debug('Added experiment: %s' % response) return response @cherrypy.expose @DmSessionController.require(DmSessionController.isLoggedIn()) @DmSessionController.execute def startExperiment(self, **kwargs): name = kwargs.get('name') if not name: raise InvalidRequest('Missing experiment name.') name = Encoder.decode(name) experiment = self.experimentSessionControllerImpl.getExperimentByName(name) if not self.hasAdministratorRole() and not self.hasManagerRole(experiment['experimentStationId']): raise AuthorizationError('User %s cannot start experiment %s.' % (self.getSessionUsername(), name)) response = self.experimentSessionControllerImpl.startExperiment(experiment).getFullJsonRep() self.logger.debug('Started experiment: %s' % response) return response @cherrypy.expose @DmSessionController.require(DmSessionController.isLoggedIn()) @DmSessionController.execute def updateExperiment(self, **kwargs): name = kwargs.get('name') if name is None or not len(name): raise InvalidRequest('Missing experiment name.') name = Encoder.decode(name) experiment = self.experimentSessionControllerImpl.getExperimentByName(name) if not self.hasAdministratorRole() and not self.hasManagerRole(experiment['experimentStationId']): raise AuthorizationError('User %s cannot update experiment %s.' % (self.getSessionUsername(), name)) response = self.experimentSessionControllerImpl.updateExperiment(experiment).getFullJsonRep() self.logger.debug('Updated experiment: %s' % response) return response @cherrypy.expose @DmSessionController.require(DmSessionController.isLoggedIn()) @DmSessionController.execute def stopExperiment(self, **kwargs): name = kwargs.get('name') if name is None or not len(name): raise InvalidRequest('Missing experiment name.') name = Encoder.decode(name) experiment = self.experimentSessionControllerImpl.getExperimentByName(name) if not self.hasAdministratorRole() and not self.hasManagerRole(experiment['experimentStationId']): raise AuthorizationError('User %s cannot stop experiment %s.' % (self.getSessionUsername(), name)) response = self.experimentSessionControllerImpl.stopExperiment(experiment).getFullJsonRep() self.logger.debug('Stopped experiment: %s' % response) return response @cherrypy.expose @DmSessionController.require(DmSessionController.isLoggedIn()) @DmSessionController.execute def authorizeDownload(self, username, experimentName, **kwargs): if not username: raise InvalidRequest('Invalid username provided.') if not experimentName: raise InvalidRequest('Invalid experiment name provided.') experiment = self.experimentSessionControllerImpl.getExperimentByName(experimentName) if not self.hasAdministratorRole() and not self.hasManagerRole(experiment['experimentStationId']): raise AuthorizationError('User %s is not allowed to authorize download for experiment %s.' % (self.getSessionUsername(), experimentName)) response = self.experimentSessionControllerImpl.authorizeDownload(username, experiment).getFullJsonRep() return response @cherrypy.expose @DmSessionController.require(DmSessionController.isLoggedIn()) @DmSessionController.execute def deauthorizeDownload(self, username, experimentName, **kwargs): if not username: raise InvalidRequest('Invalid username provided.') if not experimentName: raise InvalidRequest('Invalid experiment name provided.') experiment = self.experimentSessionControllerImpl.getExperimentByName(experimentName) if not self.hasAdministratorRole() and not self.hasManagerRole(experiment['experimentStationId']): raise AuthorizationError('User %s is not allowed to de-authorize download for experiment %s.' % (self.getSessionUsername(), experimentName)) response = self.experimentSessionControllerImpl.deauthorizeDownload(username, experiment).getFullJsonRep() return response