Skip to content
Snippets Groups Projects
experimentRestApi.py 2.68 KiB
Newer Older
import urllib

from dm.common.utility.encoder import Encoder
from dm.common.exceptions.dmException import DmException
from dm.common.objects.experiment import Experiment
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
        #print json.dumps(daqInfo)
        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={}):
sveseli's avatar
sveseli committed
        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 += '?daqInfo=%s' % (Encoder.encode(json.dumps(daqInfo)))
        responseDict = self.sendSessionRequest(url=url, method='POST')
        return Experiment(responseDict)

#######################################################################
# Testing.

if __name__ == '__main__':
    api = ExperimentRestApi('sveseli', 'sveseli', 'zagreb.svdev.net', 33336, 'http')
    print api.startDaq('experiment1', '/tmp/data/experiment1')