Skip to content
Snippets Groups Projects
experimentRestApi.py 3.15 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 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={}):
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 += '?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')