#!/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.exceptions.authorizationError import AuthorizationError from dm.common.db.api.experimentDbApi import ExperimentDbApi from dm.common.utility.encoder import Encoder from dm.ds_web_service.service.impl.fileSessionControllerImpl import FileSessionControllerImpl class FileSessionController(DmSessionController): def __init__(self): DmSessionController.__init__(self) self.experimentDbApi = ExperimentDbApi() self.fileSessionControllerImpl = FileSessionControllerImpl() @cherrypy.expose @DmSessionController.require(DmSessionController.isAdministrator()) @DmSessionController.execute def processFile(self, **kwargs): encodedFileInfo = kwargs.get('fileInfo') if not encodedFileInfo: raise InvalidRequest('Invalid file info provided.') fileInfo = json.loads(Encoder.decode(encodedFileInfo)) if not fileInfo.has_key('experimentFilePath'): raise InvalidRequest('Experiment file path is missing.') if not fileInfo.has_key('experimentName'): raise InvalidRequest('Experiment name is missing.') response = self.fileSessionControllerImpl.processFile(fileInfo).getFullJsonRep() self.logger.debug('Processed file: %s' % response) return response @cherrypy.expose @DmSessionController.require(DmSessionController.isLoggedIn()) @DmSessionController.execute def statFile(self, **kwargs): encodedFileInfo = kwargs.get('fileInfo') if not encodedFileInfo: raise InvalidRequest('Invalid file info provided.') fileInfo = json.loads(Encoder.decode(encodedFileInfo)) if not fileInfo.has_key('experimentFilePath'): raise InvalidRequest('Experiment file path is missing.') experimentName = fileInfo.get('experimentName') if not experimentName: raise InvalidRequest('Experiment name is missing.') experiment = self.experimentDbApi.getExperimentByName(experimentName) if not self.hasAdministratorRole() and not self.hasManagerRole(experiment['experimentStationId']): raise AuthorizationError('User %s cannot stat file for experiment %s.' % (self.getSessionUsername(),experimentName)) response = self.fileSessionControllerImpl.statFile(fileInfo, experiment).getFullJsonRep() self.logger.debug('File stat: %s' % response) return response @cherrypy.expose @DmSessionController.require(DmSessionController.isAdministrator()) @DmSessionController.execute def processDirectory(self, **kwargs): encodedDirectoryInfo = kwargs.get('directoryInfo') if not encodedDirectoryInfo: raise InvalidRequest('Invalid directory info provided.') directoryInfo = json.loads(Encoder.decode(encodedDirectoryInfo)) if not directoryInfo.has_key('experimentName'): raise InvalidRequest('Experiment name is missing.') response = self.fileSessionControllerImpl.processDirectory(directoryInfo).getFullJsonRep() self.logger.debug('Processed directory: %s' % response) return response