Forked from
DM / dm-docs
261 commits behind, 807 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
experimentSessionController.py 8.50 KiB
#!/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