#!/usr/bin/env python import os import json import urllib from dm.common.constants import dmProcessingStatus from dm.common.utility.encoder import Encoder from dm.common.exceptions.dmException import DmException from dm.common.objects.experiment import Experiment from dm.common.objects.uploadInfo import UploadInfo from dm.common.objects.pluginInfo import PluginInfo from dm.common.objects.daqInfo import DaqInfo from daqRestApi import DaqRestApi class ExperimentRestApi(DaqRestApi): def __init__(self, username=None, password=None, host=None, port=None, protocol=None): DaqRestApi.__init__(self, username, password, host, port, protocol) @DaqRestApi.execute def startDaq(self, experimentName, dataDirectory, daqInfo={}): if not experimentName: raise InvalidRequest('Experiment name must be provided.') if not dataDirectory: raise InvalidRequest('Experiment data directory must be provided.') url = '%s/experimentsByName/%s/startDaq/%s' % (self.getContextRoot(), Encoder.encode(experimentName), Encoder.encode(dataDirectory)) url += '?daqInfo=%s' % (Encoder.encode(json.dumps(daqInfo))) responseDict = self.sendSessionRequest(url=url, method='POST') return DaqInfo(responseDict) @DaqRestApi.execute def stopDaq(self, experimentName, dataDirectory): if not experimentName: raise InvalidRequest('Experiment name must be provided.') if not dataDirectory: raise InvalidRequest('Experiment data directory must be provided.') url = '%s/experimentsByName/%s/stopDaq/%s' % (self.getContextRoot(), Encoder.encode(experimentName), Encoder.encode(dataDirectory)) responseDict = self.sendSessionRequest(url=url, method='POST') return DaqInfo(responseDict) @DaqRestApi.execute def getDaqInfo(self, id): if not id: raise InvalidRequest('Daq id must be provided.') url = '%s/experimentDaqs/%s' % (self.getContextRoot(),id) responseDict = self.sendSessionRequest(url=url, method='GET') return DaqInfo(responseDict) @DaqRestApi.execute def listDaqs(self, status=None): if not status: status = dmProcessingStatus.DM_PROCESSING_STATUS_ANY url = '%s/experimentDaqsByStatus/%s' % (self.getContextRoot(),status) responseData = self.sendSessionRequest(url=url, method='GET') return self.toDmObjectList(responseData, DaqInfo) @DaqRestApi.execute def upload(self, experimentName, dataDirectory, daqInfo={}): if not experimentName: raise InvalidRequest('Experiment name must be provided.') if not dataDirectory: raise InvalidRequest('Experiment data directory must be provided.') url = '%s/experimentsByName/%s/upload/%s' % (self.getContextRoot(), Encoder.encode(experimentName), Encoder.encode(dataDirectory)) url += '?daqInfo=%s' % (Encoder.encode(json.dumps(daqInfo))) responseDict = self.sendSessionRequest(url=url, method='POST') return UploadInfo(responseDict) @DaqRestApi.execute def getUploadInfo(self, id): url = '%s/experimentUploads/%s' % (self.getContextRoot(),id) if not id: raise InvalidRequest('Upload id must be provided.') responseDict = self.sendSessionRequest(url=url, method='GET') return UploadInfo(responseDict) @DaqRestApi.execute def listUploads(self, status=None): if not status: status = dmProcessingStatus.DM_PROCESSING_STATUS_ANY url = '%s/experimentUploadsByStatus/%s' % (self.getContextRoot(),status) responseData = self.sendSessionRequest(url=url, method='GET') return self.toDmObjectList(responseData, UploadInfo) @DaqRestApi.execute def stopUpload(self, id): url = '%s/experimentUploads/stopUpload/%s' % (self.getContextRoot(),id) if not id: raise InvalidRequest('Upload id must be provided.') responseDict = self.sendSessionRequest(url=url, method='POST') return UploadInfo(responseDict) @DaqRestApi.execute def getProcessingPlugins(self): url = '%s/processingPlugins' % (self.getContextRoot()) responseData = self.sendSessionRequest(url=url, method='GET') return self.toDmObjectList(responseData, PluginInfo) ####################################################################### # Testing. if __name__ == '__main__': api = ExperimentRestApi('sveseli', 'sveseli', 'zagreb.svdev.net', 33336, 'http') print api.startDaq('experiment1', '/tmp/data/experiment1')