#!/usr/bin/env python import os import json import urllib 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 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={}): url = '%s/experiments/startDaq' % (self.getContextRoot()) if experimentName is None or not len(experimentName): raise InvalidRequest('Experiment name must be provided.') if dataDirectory is None or not len(dataDirectory): raise InvalidRequest('Experiment data directory must be provided.') daqInfo['experimentName'] = experimentName daqInfo['dataDirectory'] = dataDirectory url += '?experimentName=%s' % Encoder.encode(experimentName) url += '&dataDirectory=%s' % Encoder.encode(dataDirectory) url += '&daqInfo=%s' % (Encoder.encode(json.dumps(daqInfo))) responseDict = self.sendSessionRequest(url=url, method='POST') return Experiment(responseDict) @DaqRestApi.execute def stopDaq(self, experimentName): url = '%s/experiments/stopDaq' % (self.getContextRoot()) if experimentName is None or not len(experimentName): raise InvalidRequest('Experiment name must be provided.') url += '?experimentName=%s' % Encoder.encode(experimentName) responseDict = self.sendSessionRequest(url=url, method='POST') return Experiment(responseDict) @DaqRestApi.execute def upload(self, experimentName, dataDirectory, daqInfo={}): url = '%s/experiments/upload' % (self.getContextRoot()) if experimentName is None or not len(experimentName): raise InvalidRequest('Experiment name must be provided.') if dataDirectory is None or not len(dataDirectory): raise InvalidRequest('Experiment data directory must be provided.') daqInfo['experimentName'] = experimentName daqInfo['dataDirectory'] = dataDirectory url += '?experimentName=%s' % Encoder.encode(experimentName) url += '&dataDirectory=%s' % 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/experiments/upload/%s' % (self.getContextRoot(),id) if not id: raise InvalidRequest('Upload id must be provided.') responseDict = self.sendSessionRequest(url=url, method='GET') return UploadInfo(responseDict) ####################################################################### # Testing. if __name__ == '__main__': api = ExperimentRestApi('sveseli', 'sveseli', 'zagreb.svdev.net', 33336, 'http') print api.startDaq('experiment1', '/tmp/data/experiment1')